如果我有类似的话:
$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();
我需要能够选择显示名称(除了用户名)并获取用户的帖子,但同样不需要修改功能中的代码。
我该怎么做?
答案 0 :(得分:0)
是的,您应该可以这样做:
正如jensaronsson在评论中指出的,这是更好的解决方案,因为它不会导致n + 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
为此,您的Follow-Model需要建立如下关系:
public function posts()
{
return $this->hasMany('App\Post'); // Replace 'App\Post' with your model!
}
旧解决方案(不推荐)
foreach ($users as $user) {
$user->posts()->get()
}