php - 拉拉维尔 5 : Trying to get property of non-object error with relationships

标签 php mysql laravel laravel-5 eloquent

我正在运行最新版本的 Laravel。 我正在尝试建立与表的关系,但似乎总是遇到某种错误。我想要显示的数据已显示,但在所有内容下都有一个大错误:

routes.php 第 26 行出现错误异常: 尝试获取非对象的属性

在我的routes.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 列仅给出文本。

这是运行所有这些时页面上输出的图像:

enter image description here

最佳答案

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

所以代替:

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();

关于php - 拉拉维尔 5 : Trying to get property of non-object error with relationships,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35617647/

相关文章:

php - Cake PHP 3 导致过早注销

php - 在 php 文件中使用 php 更改选定的选项卡(li 元素)颜色

laravel - 升级到 Laravel 5.1 - 方法 [validator] 不存在

mysql - 使用.net core从google cloud run连接到google cloud(mysql)

html - 如何删除html输入中的文本自动保存

php - Laravel Eloquent - 选择 MAX 与其他列

php - 从 ffmpeg 返回成功或失败

javascript - 使用 php 获取其他页面的具有多个分配值的 Href 标签

MySQL 查询返回的结果多于应有的结果

php - 如何在用 php 收到 MySQL 结果后,但在编码为 json 之前,按类型对 MySQL 结果进行分组?