下午好,
我已经尽力解决这个问题,通过我在这个问题上找到的所有线程阅读,但我仍然没有运气来解决我的问题。 如果有人能帮助我,我会非常感激!
我在Ubuntu 14.04的Homestead环境中使用Laravel 5.2。
我有3个表:条目,评论,作者。所有PK都被命名为' id'
以下是Database Schema的图片。
Relevent Migration Details(注释表迁移):$table->integer('entry_id')->unsigned();
$table->foreign('entry_id')->references('id')->on('entries')->onDelete('cascade');
$table->integer('author_id')->unsigned();
$table->foreign('author_id')->references('id')->on('authors');
参赛模型:
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 = Entry::with('comments.author')->get();
此时一切正常,因此上述$条目包含由以下内容组成的预期集合:
*所有的内容,嵌套在每个内容中:
**所有相关评论,并嵌套在
中***每个评论的相关作者。
当我在DB中有多个包含相同author_id值的注释时,会出现问题。 在这种情况下,laravel Collection为我提供了第一个实例的预期数据(一个有嵌套作者的有效嵌套注释集合), 但是任何包含相同author_id的后续实例在relations属性中的值都为null,这会导致以下错误:
1/2 ErrorException in 991fecee1bbd0eb1ec5070d2f47d9c641ca4a735.php line 24:
Trying to get property of non-object
当多个author_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
有问题的查询:(当DB中有一条评论与另一条评论共享一个author_id时)EG:
| 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
]
我认为问题在于第三个查询包含:" in(' 1',' 2')"其中2不存在。
有没有人对如何解决这个问题有什么想法? 我真的希望能够成功地利用Laravel建立的雄辩的嵌套关系系统。 但如果这不可行,我是否需要写自己的自定义查询? 任何输入都会很精彩!我真的坚持这个。
感谢您的时间和帮助。
答案 0 :(得分:1)
感谢@Ravisha Hesh。
问题是由以下原因造成的:
public function author() {
return $this->belongsTo('App\Models\Author', 'id');
}
解决方案:
public function author() {
return $this->belongsTo('App\Models\Author', 'author_id');
}