2016-02-25 120 views
0

我正在运行最新版本的Laravel。 我想建立与表的关系,但我似乎总是得到某种错误。显示我要显示的数据,然后在一切都存在很大的错误说:Laravel 5:试图获得与关系的非对象错误的属性

ErrorException在routes.php文件第26行: 试图让非对象

的财产在我的路线。 php文件这是代码:

Route::get('select', function() { 
$users = App\UserInfo::all(); 

    foreach ($users as $u) { 
     echo $u->userID.' USERNAME: '.$u->userData->username.'<br/>'; 
     echo $u->userOption->dis_joindate.'<br/>'; // Line 26 
    } 
}); 

25行似乎工作正常打印没有错误,虽然下一行给出的对象错误。

这是我的UserInfo型号php文件:

UserInfo.php model

这是我的期权定价模型的PHP文件:

Options.php model

所有我的数据库设备(在USEROPTIONS表)是和id,userID,dis_joindate,dis_location,dis_posts和dis_likes。最后4个colums只是给文本。

这是在页面上输出的图像时,这一切都跑:

enter image description here

+3

检查用户“Lad”。我认为'useroptions'表没有用户“Lad”的数据 –

+0

'useroptions'确实有一个userID = 27的条目(显示的第一部分是他们的id),但useroptions确实有数据用户。 – Jek

+0

你可以请你张贴完整的跟踪,你正在? –

回答

1

这里的问题(假设关系定义的很好)可能是数据。您可能没有每个对象的相关数据。

所以不是:

foreach ($users as $u) { 
    echo $u->userID.' USERNAME: '.$u->userData->username.'<br/>'; 
    echo $u->userOption->dis_joindate.'<br/>'; // Line 26 
} 

你应该宁愿使用:

foreach ($users as $u) { 
    echo $u->userID.' USERNAME: '.(($u->userData) ? $u->userData->username : '-').'<br/>'; 
    echo (($u->userOption) ? $u->userOption->dis_joindate : '-').'<br/>'; // Line 26 
} 

除了降低查询数量,而不是:

$users = App\UserInfo::all(); 

你应该使用预先加载像所以:

$users = App\UserInfo::with('userData', 'userOption')->get(); 
1

userOption关系不设置完全正确。因此,如果没有找到相关记录,则该关系将(意外地返回给您)返回null,并且当您尝试访问对象上的dis_joindate时,会出现此错误。

在您提到的注释中,您确实有一个useroptions记录,其中userID是27,但这不是正在加载的记录。您的关系设置的方式,它实际上是寻找一个useroptions记录与id是27(而不是userID)。

定义belongsTo关系时,第二个参数是具有belongsTo关系的模型上的外键字段的名称。在这种情况下,当您指定userID时,您指定的是userinfo.userID。第三个参数是要加入的相关模型上的字段的名称。如果未指定,则默认为主键(通常为id)。由于您尚未指定此参数,因此它将默认为useroptions.id

如果你想在那里有关userinfo.userID = useroptions.userID,你需要在相关领域的添加名称的关系记录:

public function userOption() { 
    return $this->belongsTo('\App\Options', 'userID', 'userID'); 
} 

你没有提到的用户数据表的结构,但你可能要检查出来,以及。

0

您在userOptions中存在relaotic问题,它应该至少有一个记录为每个用户。 在这种情况下,用户27在表userOptions中没有记录,并且它的值为空,并且您尝试使用null对象的属性

相关问题