2015-05-23 7 views
1

Привет Я новичок в Laravel и в настоящее время использую Laravel 4.2. Я пытаюсь создать приложение, где у меня есть пользователи, сообщения и комментарии таблицы и имеют следующую модельLaravel Eloquent hasMany relationship

пользователя Модель

function posts() { 

    return $this->hasMany('Post'); 
} 


function comments(){ 

    return $this->hasMany('Comment'); 
} 

Сообщение Модель

function users() { 

    return $this->belongsTo('User'); 
} 

function comments() { 

    return $this->hasMany('Comment'); 
} 

комментарий модель

function posts(){ 

    return $this->belongsTo('Post'); 
} 

function users(){ 

    return $this->belongsTo('User'); 
} 

Чего я хочу достичь:

пользователя Сообщение и комментарий почт

eg:: User1 -> Post one -> comment for post one 

То, что я сделал до сих пор :::

$user = User::find(1); 
$post = $user->posts()->get(); 

Я смог получить пост, но как я могу получить комментарий для конкретной должности ??

Update

Благодаря @Bogdan за помощь я могу получить почту и комментарий для пользователя. Но, как обычно, была другая проблема.

Что я получил:

foreach($user->post AS $post) { 

foreach ($post->comment AS $comment) { 

$comment->commentcontent; $user->uername; 
} 
}//first foreach 

Это то, что я получаю

comment one by user1. 
comment two by user1. 

Но в действительности комментарий один создан user1 и комментировать два создается user2.

Благодарим за помощь. При необходимости можно отправить полный код.

+3

Если вы только начинаете с Laravel вы действительно должны использовать самую последнюю версию, которая +5,0 в момент написания. – lukasgeiter

+0

@lukasgeiter требование для этого проекта 4.0. Спасибо за комментарий. Ура !! – usrNotFound

ответ

3

При получении Отправляет пользователей с $user->posts()->get() вы получаете Collection из Models, на котором вы можете использовать find, чтобы получить конкретную должность вы хотите. Тогда вы можете получить комментарий к записи так же, как извлеченные сообщения пользователей:

$user = User::find(1); 
$post = $user->posts()->find($postId); 
$comments = $post->comments; 

Если вы хотите перебрать всю коллекцию сообщений, вы можете сделать это и комментарии доступа для каждой должности в отдельности, без фильтрации для конкретный пост:

foreach ($user->posts as $post) 
{ 
    $comments = $post->comments; 
} 

Кроме того, для дальнейшего использования, экранное отношение как свойство возвращает коллекцию, в то время как доступ к соотношению как метод будет возвращать экземпляр Query Builder. Таким образом, $user->posts - это то же самое, что и $user->posts()->get().

+0

Эй @ Богдан благодарит вас за ваш ответ. Это то, что я делаю, чтобы получить согласие. '$ post-> comment AS $ comment'. Я могу получить комментарий, но как я могу получить пользователя. Теперь я получаю 'этот комментарий пользователем1; этот комментарий пользователя1', где оба они комментируют два разных пользователя 'user1' и' user 2' – usrNotFound

1

Вы хотите, чтобы пользователь сделал комментарий, поэтому получите этого пользователя от объекта комментария.

Попробуйте

$user = User::find(1); 
$posts = $user->posts; 

foreach ($posts as $post) { 
    foreach ($post->comments as $comment) { 
     echo $comment->commentcontent; 
     echo $comment->users; 
    } 
} 
+0

hi @wiseodd $ comment-> пользователи получат сообщение об ошибке 'Undefined Property' – usrNotFound

+0

Ну, это зависит от ваши отношения внутри вашей модели «Комментарий». Поскольку по вашему вопросу выше вы создали комментарий - пользовательские отношения с 'users()', вам нужно получить к нему доступ, используя '$ comment-> users' или' $ comment-> users() -> get() ' – wiseodd

Смежные вопросы