2015-12-17 2 views
0
User::with(array('post'=>function($query){ 
    $query->select('id','user_id'); 
}))->get();  

Как это будет синтаксис для нескольких соединений? Мне нужно сделать это с помощью 3 соединений и 1, где условие.Как сделать несколько соединений с помощью Eloquent?

+1

уход размещать свою модель? то, как вы извлекаете одно * соединение *, хорошо - вы должны начать с него. метод ':: с ($ parameter)' принимает параметр array (и string), поэтому вы можете выполнять 'User :: with (array ('post' => ..., 'rel2' => ...., 'rel3' => ....., .....) -> где ('someField', 'someValue') -> get() 'должен работать. Посмотрите на [api] (http: // laravel .com/api/5.1/Illuminate/Database/Eloquent/Model.html # method_with) и [source] (https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Model. php # L731) и не забывайте о магии * точки * для отношений вложенности. –

+0

То, как вы это делаете - на SQL-уровне не будет никаких объединений. Будет выполнено 2 SQL-запроса - один для извлечения пользователь и один, чтобы загрузить свои сообщения. –

+0

Вместо этого вы должны использовать 'whereHas()'. Или просто 'has()' больше информации [здесь.] (http://laravel.com/docs/5.1/eloquent-relationships# запросы-отношения). Но вы также можете просто придерживаться основ и использовать простое 'join()' [здесь.] (http://laravel.com/docs/5.1/queries#joins). Это действительно зависит от того, что вы предпочитаете в использовать. – Joost

ответ

0

Попробуйте что-нибудь подобное в вашей модели пользователя:

public static function wherePost(\App\Post $post) { 

    return static::leftJoin(
     'posts', 
     'user.id', '=', 'posts.user_id' 
    ) 
    // ... more joins 
    ->where('posts.id', $post->id) 
    ->select(with(new static)->getTable().'.*'); 
} 

, чем вы можете получить пользователь от конкретной должности, как, что: $user = User::wherePost($post);

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