正在尝试获取非对象的属性“name”(视图:(…)resources/views/products/index.blade.php)

klr1opcd  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(360)

在带有products表中的数据的视图中,我试图显示user表中的名称,但出现了这个错误。我用模型和外键建立了拉威尔关系。并在产品控制器中为用户模型添加了目录。
错误:尝试获取非对象的属性“name”(view:/home/laravel/web/laravel.swt101.eu/public\u html/abonamenty/resources/views/products/index.blade.php)
这是我的控制器的一部分,用于显示产品数据:

  1. public function index()
  2. {
  3. $user = User::all('name','id');
  4. $products = Product::sortable()->paginate(5);
  5. return view('products.index',compact('products', 'user'))
  6. ->with('i', (request()->input('page', 1) - 1) * 5);
  7. }

这是我得到这个错误的部分观点

  1. <td>{{ $product->user->name }}</td>

这是此视图的rest代码:

  1. @extends('layouts.app')
  2. @section('content')
  3. <div class="row">
  4. <div class="col-lg-12 margin-tb">
  5. <div class="pull-left">
  6. <h2>Zarządzanie abonamentami</h2>
  7. </div>
  8. <div class="col-md-4">
  9. <form action="/search2" method="get">
  10. <div class="input-group">
  11. <input type="search" name="search" class="form-control">
  12. <span class="input-group-prepend">
  13. <button type="submit" class="btn btn-primary">Wyszukaj</button>
  14. </span>
  15. </div>
  16. </form>
  17. </div>
  18. <div class="pull-right">
  19. @can('product-create')
  20. <a class="btn btn-success" href="{{ route('products.create') }}"> Utwórz nowy abonament</a>
  21. @endcan
  22. </div>
  23. </div>
  24. </div>
  25. @if ($message = Session::get('success'))
  26. <div class="alert alert-success">
  27. <p>{{ $message }}</p>
  28. </div>
  29. @endif
  30. <table class="table table-bordered">
  31. <tr>
  32. <th scope="col">@sortablelink('id', 'Numer')</th>
  33. <th scope="col">@sortablelink('name', 'Nazwa usługi')</th>
  34. <th scope="col">@sortablelink('user_id', 'Kontrachent')</th>
  35. <th scope="col">@sortablelink('category', 'Kategoria')</th>
  36. <th scope="col">@sortablelink('launchdate', 'Data uruchomienia')</th>
  37. <th scope="col">@sortablelink('expirationdate', 'Data wygasnięcia')</th>
  38. <th scope="col">@sortablelink('renewalprice', 'Cena odnowienia')</th>
  39. <th width="280px">Akcja</th>
  40. </tr>
  41. @foreach ($products as $product)
  42. <tr>
  43. <td>{{ ++$i }}</td>
  44. <td>{{ $product->name }}</td>
  45. <td>{{ $product->user->name }}</td>
  46. <td>{{ $product->category }}</td>
  47. <td>{{ $product->launchdate }}</td>
  48. <td>{{ $product->expirationdate }}</td>
  49. <td>{{ $product->renewalprice }}</td>
  50. <td>
  51. <form action="{{ route('products.destroy',$product->id) }}" method="POST">
  52. <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Więcej</a>
  53. @can('product-edit')
  54. <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edytu</a>
  55. @endcan
  56. @csrf
  57. @method('DELETE')
  58. @can('product-delete')
  59. <button type="submit" class="btn btn-danger">Usuń</button>
  60. @endcan
  61. </form>
  62. </td>
  63. </tr>
  64. @endforeach
  65. </table>
  66. {!! $products ?? ''->appends(request()->except('page'))->render() !!}
  67. @endsection

这是我的产品型号:

  1. <?php
  2. namespace App;
  3. use Kyslik\ColumnSortable\Sortable;
  4. use Illuminate\Database\Eloquent\Model;
  5. class Product extends Model
  6. {
  7. /**
  8. * The attributes that are mass assignable.
  9. *
  10. * @var array
  11. */
  12. use Sortable;
  13. protected $fillable = [
  14. 'name', 'detail', 'id', 'created_at', 'updated at', 'category', 'launchdate', 'expirationdate', 'renewalprice', 'user_id', 'billingperiod', 'internalcost', 'status'
  15. ];
  16. public $sortable = ['id', 'name', 'created_at', 'updated at', 'category', 'launchdate', 'expirationdate', 'renewalprice', 'category', 'user_id'];
  17. public function user()
  18. {
  19. return $this->belongsTo('App\User','user_id');
  20. }
  21. }

这是我的用户模型:

  1. <?php
  2. namespace App;
  3. use Illuminate\Notifications\Notifiable;
  4. use Illuminate\Contracts\Auth\MustVerifyEmail;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. use Spatie\Permission\Traits\HasRoles;
  7. use Kyslik\ColumnSortable\Sortable;
  8. use Illuminate\Database\Eloquent\Model;
  9. class User extends Authenticatable
  10. {
  11. use Notifiable;
  12. use HasRoles;
  13. use Sortable;
  14. /**
  15. * The attributes that are mass assignable.
  16. *
  17. * @var array
  18. */
  19. protected $fillable = [
  20. 'name', 'email', 'password', 'surname', 'showname', 'business', 'NIP', 'PESEL', 'address', 'city', 'postalcode', 'phone', 'comments',
  21. ];
  22. public $primaryKey = 'id';
  23. /**
  24. * The attributes that should be hidden for arrays.
  25. *
  26. * @var array
  27. */
  28. protected $hidden = [
  29. 'password', 'remember_token',
  30. ];
  31. /**
  32. * The attributes that should be cast to native types.
  33. *
  34. * @var array
  35. */
  36. protected $casts = [
  37. 'email_verified_at' => 'datetime',
  38. ];
  39. public $sortable = ['name',
  40. 'email',
  41. 'surname',
  42. 'showname',
  43. 'business',
  44. 'address',
  45. 'city',
  46. 'phone',
  47. 'role',
  48. ];
  49. public function products()
  50. {
  51. return $this->hasMany('App\Product');
  52. }
  53. public function invoices()
  54. {
  55. return $this->hasMany('App\Invoice');
  56. }
  57. }
weylhg0b

weylhg0b1#

错误表明 $product->user 可能会回来 null . 也许不是所有的产品都因为某种原因与用户相关。
找到产品id并在数据库中查找,以查看是否有用户连接。

相关问题