У меня есть следующие 3 таблицы:
- Сообщения
- Комментарии
- Метки
Сообщения:
class Post extends Eloquent
{
public function comments()
{
return $this->hasMany(Comment::class,'post_id','id');
}
}
** Post data **
{
'id' : 1,
'title' : 'bla bla',
'created_at: 'some date'
}
Комментарии:
class Comment extends Eloquent
{
public function comments()
{
return $this->belongsTo(Post::class,'id');
}
public function tags()
{
return $this->hasMany(Tag::class,'id','tags_ids');
}
}
** Comments data **
{
'id' : 322,
'active' : true
'post_id' : 1,
'created_at: 'some date',
'tags_ids' : [1,2,3]
}
Теги:
class Tag extends Eloquent
{
public function tags()
{
return $this->belongsTo(Comment::class,'tags_ids');
}
}
** Tags data **
{
{'id' : 1,
'description' : 'some description1'
},
{'id' : 2,
'description' : 'some description2'
},
{'id' : 3,
'description' : 'some description3'
}
}
В таблице записей много комментариев, а в таблице комментариев - много тегов.
Как мне собрать все эти таблицы вместе, используя готовую загрузку?
Что-то вроде:
$post = Post::where('id',1)->with(['comments' => function($q) {
$q->with('tags');
}])->first();
, но этот запрос всегда возвращает пустой ответ в отношении тегов.
Что я делаю неправильно ?
Желаемый результат выглядит примерно так:
{
'id' : 1,
'title' : 'bla bla',
'created_at: 'some date',
'comments':[{
'id' : 322,
'active' : true
'post_id' : 1,
'created_at: 'some date',
'tags_ids' : [1,2,3],
'tags' : [
{'id' : 1,'description' : 'some description1'},
{'id' : 2, 'description' : 'some description2'},
{'id' : 3,'description' : 'some description3'}
],
}
]
}
Вы можете видеть, что пост содержит комментарии внутри него, а также комментарии содержат теги внутри него.
PS Я использую пакет 'jenssegers / laravel -mongodb' в своем проекте и пытаюсь сделать это без какого-либо необработанного выражения.
Спасибо.