我试图实现一对一的关系,即我从一个'命令'当我查看该关系中的任何记录时,我不断收到未定义的属性错误。
在我的模型中,我有以下
public function preferences()
{
return $this->hasOne('App\WebsitePreferences', 'id', 'website_id');
}
然后我就这样称呼它
$websites = Website::where('active', 1)->get();
foreach ($websites as $website) {
var_dump($website->preferences()->status);
}
确切的错误如下
Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$status
如果我执行var_dump($ website),它将返回该表中的所有值,而不是与该网站相关联的WebsitePreferences表中的值'
我有一些其他的一对一关系,他们都工作得很好。
非常感谢任何帮助。
答案 0 :(得分:1)
当您将关系作为方法调用时,它将返回QueryBuilder实例。这允许您与where,with等保持链接。
相反,你应该把它称为属性:
$website->preferences->status
答案 1 :(得分:0)
在你的模特中试试这个:
public function preferences()
{
return $this->hasOne('App\WebsitePreferences', 'website_id');
}
在您的控制器中:
Website::with('preferences')->get()
在您看来:
foreach ($websites as $website) {
@php(dd($website->preferences->status)); }
答案 2 :(得分:0)
public function preferences()
{
return $this->hasOne('App\WebsitePreferences', 'id', 'website_id');
}
$websites = Website::where('active', 1)->get();
你需要检查空的关系
foreach ($websites as $website) {
if(empty($website->preferences) === false){
$website->preferences->status
}
}