【问题标题】:Laravel 5.5 Relationships - ErrorException Trying to get property of non-objectLaravel 5.5 关系-ErrorException 试图获取非对象的属性
【发布时间】:2018-02-10 14:33:51
【问题描述】:

无法显示来自数据库的信息以供查看,出现错误

错误异常 试图获取非对象的属性

让我解释一下逻辑:

  1. 用户可以创建多个公司
  2. 公司可以有很多项目

向数据库插入信息没有问题,一切都很好。 我可以在我的显示视图中显示来自用户表和公司表的所有信息,但我无法在我的视图中显示来自 Company_Items 表的信息。 我想我的关系或密钥有问题,但是什么? 试图显示属于特定公司的项目名称

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

公司表:

  • id(int)
  • 公司名称(字符串)
  • 信息(文本)
  • 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

【问题讨论】:

  • 查看下面的答案

标签: laravel


【解决方案1】:

你犯的第一个错误是:

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

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

您可以这样做:

$company_items = $company->item;

这将返回该公司的所有项目

在您看来,您可以使用 foreach 循环访问项目:

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

【讨论】:

  • 例如:我有 2 家公司:Samsung(id 1) 和 Apple(id 2)(表 Company 中的值)我有一个项目:iPhone 6、iPhone 7、Samsung Galaxy s8、Samsung Galaxy s7(表 Company_items 中的值) 我想在 Apple 页面中仅显示 iPhone,在三星页面中仅显示 Galaxy。我有一个关系,所以 iPhone 有 company_id 1 和三星 = company_id 2
  • 这正是我在回答伙伴中写的。假设 Apple 公司的 ID=1,因此 Iphone 6 的 company_id=1 就是这种关系的含义,只需粘贴我编写的代码即可:)
  • 好吧,可能因为我的英语没听懂你,我会测试并回答;)
【解决方案2】:

$company-&gt;company_items是公司所有项目的列表,你不能在上面调用参数。而且您声明了与名称 item 的关系,而不是 company_items

尝试做:

$company->item[0]->name

或

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

{{ $item->name }}

@endforeach

【讨论】:

  • 感谢您的回答,您的解决方案也有效。并感谢您告诉我有关关系名称的信息;)
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2020-09-30
  • 1970-01-01
  • 2018-06-06
相关资源
最近更新 更多