2013-03-24 3 views
1

Учитывая следующую суть: https://gist.github.com/atrauzzi/6674488eb4fbd7a45671Присоединение через несколько отношений для сбора

Users have and belong to many Applications.

Applications have many PushMessages.

PushMessages belong to one Application.

Я хотел бы быть в состоянии получить все PushMessages для каждого приложения, Пользователь связан с.

Глядя на QueryCode.php в сущности, что мне нужно изменить, чтобы заставить работу работать?

ответ

0

Я бы использовал класс PushMessage для их запроса.

$user = User::find(Auth::user()->id); 
$pushMessages = PushMessage::whereIn('application_id', $user->applications()->lists('id')); 
+0

Невозможно ли использовать коллекции ORM для его запроса? Это похоже на то, что в основном написано руководство SQL ... –

+0

Также вы отправляете два запроса, где все это можно сделать с одним в соответствии с моим примером. –

0
PushMessage::leftJoin(Application::getTable(), Application::getTable().'.id', '=', PushMessage::getTable().'.application_id')->leftJoin(...)->where(Application::getTable().'.user_id','=',1)->select(PushMessage::getTable().'.*')->get(); 

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

+0

Опять же, это похоже на хак. Если вы посмотрите на мой примерный запрос, я использую загрузку для загрузки в отношениях ... Мне трудно поверить, что нет доступа к этим данным ... –

+1

Это не взлом. Красноречивый действительно просто пытается быть тонким слоем между sql и объектами. Запрос, который я написал, не является полным, потому что я не хотел записывать все соединения. UPDATE: я посмотрел на ваш QueryCode.php, я думаю, что это «StudlyCaps», который предотвращает загрузку ваших отношений. – kapv89