如何将以下SQL查询转换为Laravel查询生成器?
select
*
from
users
where
EXISTS (
SELECT
*
from
posts
where
posts.created_by = users.id )
答案 0 :(得分:2)
以下应该可以工作:
DB::table('users')
->whereExists(function ($query) {
$query->select('*')
->from('posts')
->whereRaw('posts.created_by = users.id');
})
->get();
您还可以查看documentation.
答案 1 :(得分:1)
您可以将has
方法用于相应的关系。
为此:
User
和Post
模型。User
有许多Post
,其中posts
是关系,Post
属于User
。 has
方法使用关系,例如:User::has('posts')->get()
,其中posts
是User
模型中关系的名称。来自docs:
访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,假设您要检索所有具有至少一条评论的博客文章。为此,您可以将关系的名称传递给has和orHas方法:
// Retrieve all posts that have at least one comment...
$posts = App\Post::has('comments')->get();
因此,在您的代码中,它将检索所有至少一篇文章的用户