我获得经过身份验证的用户拥有的所有项目。
$项=验证::用户() - >在('项目') - >得到();
在我看来,我可以访问items集合,但不是title_id想要检索item_title值。 目前,我可以使用以下代码获取item_title值:
$本期特价货品>标题 - >标题
是否可以简化它以检索这样的标题: $本期特价货品>标题 ?
这是我的模特和关系:
Users
id
username
Item
id
user_id
title_id
Item_Titles
id
title
用户模型:
public function items()
{
return $this->hasMany('Item', 'user_id', 'id');
}
项目模型:
public function user(){
return $this->belongsTo('User', 'user_id', 'id');
}
public function title()
{
return $this->belongsTo('ItemTitle','title_id','id');
}
ItemTitle型号:
public function item()
{
return $this->hasMany('Item', 'title_id', 'id');
}
更新
对不起,我可能还不清楚。确切地说 - 我只想找到Eloquent替代:
$items=Item::where('user_id','=',Auth::id())->leftJoin('item_titles', 'item.title_id', '=', 'item_titles.id')->get();
@foreach ($items as $item)
{{ $item->title }}
@endforeach
答案 0 :(得分:3)
只需将关系功能更改为
即可物品型号:
public function title()
{
return $this->belongsTo('ItemTitle','title_id','id')->first()->title;
}
除非您也
,否则您需要将其称为$item->title()
public function getTitleAttribute(){
return $this->title();
}
你可能会得到一些有趣的东西,所有被称为' title'但是这个$item->title
也应该有效我认为
答案 1 :(得分:2)
是的。看起来您设置了与Item
模型作为数据透视表的多对多关系。
用户模型
public function titles()
{
return $this->belongsToMany('ItemTitle', 'items');
}
注意:将ItemTitle
更改为正确的命名空间。另外,将items
更改为Item
模型的表名。
你也可以像这样定义反向关系:
ItemTitle模型
public function users()
{
return $this->belongsToMany('User', 'items');
}
从那里,您可以像这样获得所有经过身份验证的用户ItemTitles
:
$titles = Auth::user()->titles;
链接到文档:https://laravel.com/docs/5.1/eloquent-relationships#many-to-many
根据以下评论进行编辑(感谢@ash帮助澄清并提出建议):
另一个答案更像是你想要实现的目标,所以我建议你去看看。但是,您的问题中存在错误。这不会返回项目:
$items=Auth::user()->with('items')->get();
返回所有用户急切加载的项目。要查看此证明,如果您dd($items)
,您很可能会看到数据库中的每个用户。
这很可能不是你想要做的。要获取经过身份验证的用户的所有项目,您应该这样做:
$items = Auth::user()->items;
获取项目集合非常简单。这将运行2个查询 - 1个用于获取用户,另一个用于获取所有项目。