我有这样的数据库表:
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
然而,当我急切地加载拍摄并尝试获取程序对象时,我会检索拍摄属性“程序”。 E.g:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
echo $shoot->programme; // returns 1, not App\Programme object.
是否有解决方案而无需重写大量代码库?
答案 0 :(得分:5)
您不应对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');
}
希望这会有所帮助。
答案 1 :(得分:1)
这将始终返回数据库中的列(如果存在),即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
希望这有效!
答案 2 :(得分:1)
要实现以下目标,您需要执行以下操作:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
$variable = $shoot->programme; // returns 1
$obj = $page->getRelationValue('programme') // returns App\Programme object.