Laravel:使用where子句计算相关模型的有效方法

时间:2016-10-09 21:29:33

标签: php mysql eloquent laravel-5.2 relationship

我有两个模型UserPosts

  • 用户:id,name
  • 发布:id,title,post,user_id

我想检查一些user posts是否title给定$user = User::find($userId); $posts = $user->posts; $postsWithGivenTitle = $posts->where('title','=',$title); $postCount = $postsWithGivenTitle->count();

$user = User::find($userId)->withCount(['posts' => function ($q) use ($title) {
    $q->where('title','=',$title);
}])->first();

我认为上面的内容应该可行,但我需要超越这个并高效地完成它。所以我得到了它并且它正在工作,但仍然不确定它是否正确。

if ($user->posts_count > 0) { 
    //do something
}

然后检查计数:

find()

令我感到困惑的是,看起来很丑,在同一个查询中使用了first()foreach方法。所以希望我在这里错过了一些简单的东西并且过度思考它。

由于

1 个答案:

答案 0 :(得分:0)

正如您在文档中看到的那样:https://laravel.com/docs/5.3/eloquent-relationships

你可以像这样实现你想要的东西:

$user = User::withCount(['posts' => function($q){....}])->find($id)