Laravel一对一的关系给出了错误

时间:2016-09-07 12:44:38

标签: php laravel laravel-5

我试图实现一对一的关系,即我从一个'命令'当我查看该关系中的任何记录时,我不断收到未定义的属性错误。

在我的模型中,我有以下

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表中的值'

我有一些其他的一对一关系,他们都工作得很好。

非常感谢任何帮助。

3 个答案:

答案 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
    }
}