2015-10-03 3 views
0

Если у меня есть что-то вроде:Применение нескольких условий запроса после вызова функции

$users = Helpers::getUsersFollowing($user_id); 

Где getUsersFollowing() выглядит следующим образом:

public static function getUsersFollowing($user_id) 
{ 
    return Follow::where('user_id', $user_id) 
     ->select('username') 
     ->get(); 
} 

Можно ли, без изменения кода в функции, применить больше запросов после вызова функции, например:

$users = Helpers::getUsersFollowing($user_id) 
    ->with('posts') 
    ->select('display_name') 
    ->get(); 

Мне нужно уметь выбирать t отображать имена (в дополнение к именам пользователей) и получать сообщения пользователя, но опять же, не изменяя код в функции.

Как я могу это сделать?

ответ

0

Да, вы должны быть в состоянии сделать это так:

, как jensaronsson отметил в комментариях, это лучшее решение, потому что это не приводит к п + 1 запрос

$users = Helpers::getUsersFollowing($user_id); 

$user->load('posts') 

// Do this if you need additional query constraints 
$users->load(['author' => function ($query) { 
    $query->orderBy('whatever', 'asc'); 
}]); 

См Laravel Docs: Querying Relationships

для этого, чтобы работать ваш Последующие модели необходимо иметь отношения настроить так:

public function posts() 
{ 
    return $this->hasMany('App\Post'); // Replace 'App\Post' with your model! 
} 

Старое решение (не рекомендуется)

foreach ($users as $user) { 
    $user->posts()->get() 
} 
+0

Это приведет к задаче п + 1 запроса. Вместо этого вам нужно будет загружать сообщения из коллекции. как '' '$ users-> load ('posts')' '' – jensaronsson

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