Laravel 5.5关系 - ErrorException试图获取非对象的属性

时间:2017-09-01 13:52:44

标签: laravel

无法显示来自DB的信息以查看,出现错误

  

ErrorException   试图获得非对象的属性

让我解释一下逻辑:

  1. 用户可以创建多家公司
  2. 公司可以有很多项目
  3. 我没有将信息插入数据库的问题,一切都很好。 我可以在Show View中显示Users表和Company表中的每个信息,但是我无法在视图中显示Company_Items表中的信息。 我猜我的关系或钥匙有问题,但是什么? 试图显示属于特定公司的项目名称

    {{$company->company_items->name}}
    

    公司表:

    • ID(int)的
    • COMPANY_NAME(字符串)
    • 信息(文本)
    • USER_ID(int)的

    Company_items表:

    • ID(int)的
    • COMPANY_ID(int)的
    • 名称(字符串)

    公司型号:

    class Company extends Model
    {
      protected $table = 'company';
    
    //relation. MANY companies can be created by ONE user
    public function user(){
        return $this->belongsTo('App\User');
    }
    
    //relation. ONE company can have MANY items
    public function item(){
        return $this->hasMany('App\Item');
    }
    }
    

    物品型号:

    class Item extends Model
    {
     protected $table = 'company_items';
    
    //relation. MANY items can be applied TO ONE company 
    public function company(){
        return $this->belongsTo('App\Company');
    }
    }
    

    控制器:

    public function show($id)
        {
    
       $company = Company::find($id);
       $user = User::find($id);
       $company_items = Item::find($id);
    
       return view('company_show')->with(['company' => $company,'company_items' => $company_items]);
    
    }
    

    查看:

    This is <b>{{$company->company_id}}</b> page info created by <b>{{$company->user->name}}</b><br>
                            Company category is <b>{{$company->company_category}}</b>.<br>
                            Item name is <b>{{$company->company_items->name}}</b>. // Can't display this expression
    

2 个答案:

答案 0 :(得分:0)

$company->company_items是公司所有项目的列表,您无法在其上调用参数。并且您使用名称item而不是company_items

声明了您的关系

尝试:

$company->item[0]->name

@foreach($company->item as $item)

{{ $item->name }}

@endforeach

答案 1 :(得分:0)

您犯的第一个错误是:

$company_items = Item::find($id);

这将返回ID = $ id的公司Item,这意味着它将返回与公司具有相同ID的Item!我确定那不是你想要的。

相反,你可以这样做:

$company_items = $company->item;

将返回该公司的所有项目

在您的视图中,您可以使用foreach循环访问项目:

@foreach($company_items as $item){
   {{$item->name}}
}