![](/img/trans.png)
[英]Laravel Eloquent Relation Query - Get data along with relation attribute
[英]Laravel get Eloquent relation by same name as its attribute
我有这样的数据库表:
shoot: id, name, programme
programme: id, name
拍摄中雄辩的关系定义如下:
public function programme() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
使用dd()
,我可以看到它正常工作:
dd(Shoot:where('id','=',1)->with('programme')->first());
// prints the object with programme listed under the relationship
然而,当我急切地加载拍摄并尝试获取程序对象时,我会检索拍摄属性“程序”。 例如:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
echo $shoot->programme; // returns 1, not App\Programme object.
是否有解决方案,而无需重写大量的代码库?
你不应该为relationship
和column
名使用相同的名称,否则你将始终收到column
名,所以尝试编辑其中一个,我认为这里最简单的是relationship
名称:
public function programmeObj() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
然后将其称为:
echo $shoot->programmeObj;
注意:但是如果你想遵循约定,你应该用programme_id
替换name属性,这样:
public function programme() {
return $this->belongsTo('App\Programme', 'programme_id', 'id');
}
希望这可以帮助。
这将始终返回数据库中的列(如果存在),即ID 1。
当你调用dump($shoot);
你应该获得具有所有属性的数组。 但是当你运行以下内容时,你应该得到这个名字:
你的型号:
public function programmeData() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
而你的控制器:
$shoot = Shoot:where('id','=',1)->first();
return $shoot->programmeData->name; // returns name
希望这个有效!
为了实现您的目标,您将需要执行以下操作:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
$variable = $shoot->programme; // returns 1
$obj = $page->getRelationValue('programme') // returns App\Programme object.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.