Laravel 5,仅获取 eloquent 模型的关系
Laravel 5, get only relationship for eloquent model
我的应用程序中有用户和文章模型。它们之间的关系很简单:
//article.php
use Taggable;
public function user()
{
return $this->belongsTo('App\User');
}
文章使用了 Taggable 库,它为我提供了多种方法,例如 Article::withAnyTags(returns 所有带有 'xyz' 字符串标记的文章)。现在我想让所有发布 article/s 的用户都标记为 'xyz'。我知道如何分两行执行此操作,但有些事情告诉我这是不对的。理想情况下,我想做这样的事情:
$users = Article::withAnyTags('xyz')->with('user')->select('user'); --pseudocode
在eloquent中可以这样做吗?
旁注:我认为我可以用 DB::table 做到这一点,但这对我来说不是一个选择。请注意,我的伪代码末尾没有“->get()”。是这样的,因为我正在使用仅适用于 eloquent 查询的 lib 对用户的结果集进行分页。
您可以使用 whereHas():
User::whereHas('articles', function ($query) {
$query->withAnyTags('xyz');
})->paginate();
或者如果您需要将标签变量传递给闭包,您可以这样做:
$tag = 'xyz';
User::whereHas('articles', function ($query) use($tag) {
$query->withAnyTags($tag);
})->paginate();
我的应用程序中有用户和文章模型。它们之间的关系很简单:
//article.php
use Taggable;
public function user()
{
return $this->belongsTo('App\User');
}
文章使用了 Taggable 库,它为我提供了多种方法,例如 Article::withAnyTags(returns 所有带有 'xyz' 字符串标记的文章)。现在我想让所有发布 article/s 的用户都标记为 'xyz'。我知道如何分两行执行此操作,但有些事情告诉我这是不对的。理想情况下,我想做这样的事情:
$users = Article::withAnyTags('xyz')->with('user')->select('user'); --pseudocode
在eloquent中可以这样做吗?
旁注:我认为我可以用 DB::table 做到这一点,但这对我来说不是一个选择。请注意,我的伪代码末尾没有“->get()”。是这样的,因为我正在使用仅适用于 eloquent 查询的 lib 对用户的结果集进行分页。
您可以使用 whereHas():
User::whereHas('articles', function ($query) {
$query->withAnyTags('xyz');
})->paginate();
或者如果您需要将标签变量传递给闭包,您可以这样做:
$tag = 'xyz';
User::whereHas('articles', function ($query) use($tag) {
$query->withAnyTags($tag);
})->paginate();