kir*_*rgy 3 php laravel eloquent laravel-5.2
我有这样的数据库表:
shoot: id, name, programme
programme: id, name
Run Code Online (Sandbox Code Playgroud)
拍摄中雄辩的关系定义如下:
public function programme() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
Run Code Online (Sandbox Code Playgroud)
使用时dd(),我可以看到它正常工作:
dd(Shoot:where('id','=',1)->with('programme')->first());
// prints the object with programme listed under the relationship
Run Code Online (Sandbox Code Playgroud)
但是,当我渴望加载拍摄并尝试获取程序对象时,我取而代之的是获取拍摄属性“ programme”。例如:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
echo $shoot->programme; // returns 1, not App\Programme object.
Run Code Online (Sandbox Code Playgroud)
是否有解决方案而不必重写大量代码库?
您不应该对名称relationship和column名称使用相同的名称,否则您将始终收到column名称,因此请尝试编辑其中之一,我认为这里最简单的relationship名称是:
public function programmeObj() {
return $this->belongsTo('App\Programme', 'programme', 'id');
}
Run Code Online (Sandbox Code Playgroud)
然后将其称为:
echo $shoot->programmeObj;
Run Code Online (Sandbox Code Playgroud)
注意:但是,如果要遵循约定,则应将programme_idso 替换为name属性:
public function programme() {
return $this->belongsTo('App\Programme', 'programme_id', 'id');
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
要实现您的目标,您需要执行以下操作:
$shoot = Shoot:where('id','=',1)->with('programme')->first();
$variable = $shoot->programme; // returns 1
$obj = $page->getRelationValue('programme') // returns App\Programme object.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3755 次 |
| 最近记录: |