Laravel 5 雄辩的嵌套关系返回null。创建错误查询

Laravel 5 雄辩的嵌套关系返回null。创建错误查询,laravel-5,eloquent,Laravel 5,Eloquent,下午好 我已经尽了最大的努力来解决这个问题,阅读了所有关于这个问题的线索,但我仍然没有解决我的问题的运气。 如果有人能帮助我,我将非常感激 背景 我在Ubuntu 14.04的Homestead环境中使用了Laravel5.2 数据库 我有3个表:条目、注释、作者。所有PK均命名为“id” 这是一张照片 相关迁移详细信息(注释表迁移): 模型: 进入模式: public function comments() { return $this->hasMany('App\Models\

下午好

我已经尽了最大的努力来解决这个问题,阅读了所有关于这个问题的线索,但我仍然没有解决我的问题的运气。 如果有人能帮助我,我将非常感激

背景 我在Ubuntu 14.04的Homestead环境中使用了Laravel5.2

数据库 我有3个表:条目、注释、作者。所有PK均命名为“id”

这是一张照片

相关迁移详细信息(注释表迁移): 模型: 进入模式:

public function comments() {
    return $this->hasMany('App\Models\Comment');
}
作者模型:

public function comments() {
    return $this->hasMany('App\Models\Comment');
}
注释模型:

public function entry() {
    return $this->belongsTo('App\Models\Entry');
}
public function author() {
    return $this->belongsTo('App\Models\Author', 'id');
}
控制器:(嵌套关系查询) 此时,一切都正常工作,因此上述$entries包含由以下内容组成的预期集合:

*嵌套在每个实体中的所有实体:

**所有关联的注释,并嵌套在该注释中

***每个评论的关联作者

问题 当我在数据库中有多个注释包含相同的author_id值时,就会出现问题。 在这个场景中,laravel集合为我提供了第一个实例的预期数据(具有嵌套作者的有效嵌套注释集合), 但是包含相同author_id的任何后续实例在relations属性中的值为null,这将导致以下错误:

1/2 ErrorException in 991fecee1bbd0eb1ec5070d2f47d9c641ca4a735.php line 24:
Trying to get property of non-object
只有当多个作者id相同时,我才会出现上述错误。 因此,我知道在视图中访问集合数据的方式没有问题

调试由以下人员创建的查询: 工作查询:(当数据库中的所有注释都有唯一的作者id时)例如: 有问题的查询:(当数据库中有一条评论与另一条评论共享作者id时)例如: 我认为问题在于第三个查询包含:“in('1','2'),其中2不存在

有没有人想过如何解决这个问题? 我真的很想能够成功地利用拉威尔内置的雄辩的嵌套关系系统。 但如果这不可行,我需要编写自己的自定义查询吗? 任何输入都将是美妙的!我真的被这件事缠住了


谢谢你的时间和帮助。

谢谢@Ravisha Hesh

问题是由以下原因引起的:

public function author() {
    return $this->belongsTo('App\Models\Author', 'id');
}
解决方案:

public function author() {
    return $this->belongsTo('App\Models\Author', 'author_id');
}

author
关系中删除
id
,或将其更改为
author\u id
谢谢@Ravisha Hesh,使用“id”的注释模型关系确实是问题的原因。我把“id”改为“author\u id”,现在它工作得很好。
| id    | author_id     | text      |
|----   |-----------    |-------    |
| 1     | 1             | blah1     |
|       |               |           |


select * from `entries`
select * from `comments` where `comments`.`entry_id` in ('1')
select * from `authors` where `authors`.`id` in ('1')

#relations: array:1 [▼
    "author" => Author {
        //all correct  data displays here
| id    | author_id     | text      |
|----   |-----------    |-------    |
| 1     | 1             | blah1     |
| 2     | 1             | blah2     |
|       |               |           |

select * from `entries`
select * from `comments` where `comments`.`entry_id` in ('1', '2')
select * from `authors` where `authors`.`id` in ('1', '2')

#relations: array:1 [▼
    "author" => null
]
public function author() {
    return $this->belongsTo('App\Models\Author', 'id');
}
public function author() {
    return $this->belongsTo('App\Models\Author', 'author_id');
}