在Laravel中创建子查询

时间:2019-01-27 14:37:36

标签: laravel laravel-5

如何将以下SQL查询转换为Laravel查询生成器?

select
    *
from
    users
where
    EXISTS (
    SELECT
        *
    from
        posts
    where
        posts.created_by = users.id )

2 个答案:

答案 0 :(得分:2)

以下应该可以工作:

DB::table('users')
    ->whereExists(function ($query) {
        $query->select('*')
            ->from('posts')
            ->whereRaw('posts.created_by = users.id');
    })
    ->get();

您还可以查看documentation.

答案 1 :(得分:1)

您可以将has方法用于相应的关系。

为此:

  1. 创建UserPost模型。
  2. 定义模型之间的关系,例如User有许多Post,其中posts是关系,Post属于User
  3. 通过has方法使用关系,例如:User::has('posts')->get(),其中postsUser模型中关系的名称。

来自docs

  

访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,假设您要检索所有具有至少一条评论的博客文章。为此,您可以将关系的名称传递给has和orHas方法:

// Retrieve all posts that have at least one comment...
$posts = App\Post::has('comments')->get();

因此,在您的代码中,它将检索所有至少一篇文章的用户