2016-01-11 4 views
1

У меня есть 3 стола пользователей, сообщений и фотографий.Laravel eloquent model - получить строки с использованием промежуточной таблицы

стол стол имеет одно - одно отношение к фотографиям & пользователей нравится post.user_id=users.id и post_photo_id=photos._id.

Я использую

public function posts(){ 
    return $this->hasMany('Post'); 
} 

и я получаю все сообщения от пользователя, используя $ user-> сообщений().

Что мне нужно - это получить все фотографии от пользователя, например, $ user-> photos.

SELECT photos.* FROM photos JOIN posts ON posts.photo_id=photos.id JOIN users ON users.id=posts.user_id WHERE user_id=1

Примечание: фотографии таблица имеет только 2 поля, ID & фото.

+0

Попробуйте заклеивание ' -> whereIn() 'с подзапросом, или сделать соединение непосредственно по отношению. Отношение просто возвращает объект запроса, и все методы построения запросов присутствуют для использования. – jardis

ответ

0

В модели пользователя, создать отношения, как

Class User Extends Model 
{ 
... 
public function photos() 
{ 
    return $this->hasManyThrough('Photos','Posts','photo_id','id'); 
    // Params (all strings): Final Model, Intermediate Model, Intermediate Model Key (posts), final Model Key (your photos) 
} 

public function Posts() 
{ 
    return $this->hasMany('Posts'); 
} 
... 
}// end class 

Тогда в контроллере, вы просто позвоните ваши данные с отношениями. Это предполагает, что вы намекаете, но вы получите идею ...

$picturesByUser = $this->user->with(['posts','photos'])->find($id); 

наконец, в вашем лезвии, просто нетерпеливый загрузить их ...

@foreach(...) 
    $user->photos->pathToPicture; 
    $user->posts->pictureTitle; 
@endforeach 

Straight out of the Laravel Docs

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