2015-04-20 4 views
0

У меня есть три модели - блог, сообщение, комментарий. Блог имеет много Post Post имеет много комментарийLaravel Eloquent Relationship issue

, когда я пишу

return Blog::with('posts','posts.comments')->get(); 

Это даст все блоги с сообщениями и комментариями. Но как я получу те блоги, которые создаются пользователем admin i.e. user_id, который находится в таблице комментариев. Где написать ->where состояние.

return Blog::with('posts','posts.comments')->where('comments.user_id','=','23')->get(); 

дает ошибки.

SQLSTATE[42P01]: Undefined table: 7 ERROR: missing FROM-clause entry for table "comments" 
LINE 1: select * from "blogs" where "comments"."is_... 
^ (SQL: select * from "blogs" where "comments"."user_id" = 23) 

Как решить эту проблему.

+1

Пожалуйста, пост ошибки – user1012181

+1

Side Примечание: Вы только должны сделать 'posts.comments' и не так, поскольку вложенными взаимоотношен загружать каждое отношение, которое оно выполняет через ('posts' &' comments') – SamV

+0

Ваш вопрос не имеет большого смысла. Вам нужны блоги, созданные определенным пользователем, но user_id находится в таблице комментариев. Почему и как писатели комментариев для блога диктуют, кому принадлежит сам блог? – user3158900

ответ

1

Если я правильно понимаю, вы хотите получить все сообщения, которые были прокомментированы конкретным пользователем.

От того, что вы сделали до сих пор, whereHas() может быть тем, что вы ищете. Вот как вы могли это сделать.

return Blog::with('posts.comments') 
       ->whereHas('posts.comments', function($q) use ($user){ 
        $q->where('comments.user_id', $user->id); 
       })->get(); 

Источник: http://laravel.com/docs/5.0/eloquent#querying-relations

+0

работ. Благодаря :-) –

0

Вы можете попробовать это:

return Blog::with([ 'posts', 'posts.comments' => function($query) 
{ 
    $query->where('comments.user_id', '23'); 
}])->get();