在 Laravel 5.3 中写入嵌套 Select 查询
Write Nested Select Query in Laravel 5.3
如何在 Laravel 5.3 中编写复杂的查询?我正在尝试但没有得到我期望的结果。
查询
SELECT * FROM (SELECT posts.post_id
FROM posts
WHERE ((posts.user_id = 1 AND posts.user_type = 'user')
OR (posts.user_id IN (1) AND posts.user_type = 'page'))) posts
WHERE posts.post_id > '0' ORDER BY posts.post_id DESC
请使用 Laravel 查询生成器帮我写这个。
这是你的答案。
$MyQuery = DB::table(DB::Raw("(SELECT
posts.post_id
FROM
posts
WHERE
(
(
posts.user_id = 1
AND posts.user_type = 'user'
)
OR
(
posts.user_id IN (1)
AND posts.user_type = 'page'
)
)
)"))
->where('posts.post_id','>',"0")->orderBy("posts.post_id" , "DESC")->get();
像这样使用 ->toSql()
尝试打印一次查询
echo $MyQuery = DB::table(DB::Raw("(SELECT
posts.post_id
FROM
posts
WHERE((
posts.user_id = 1
AND posts.user_type = 'user'
)
OR(
posts.user_id IN (1)
AND posts.user_type = 'page'
)))"))
->where('posts.post_id','>',"0")->orderBy("posts.post_id" , "DESC")->toSql();
die();
@Punit Gajjar 提供了一种解决方案,但这并不是您的问题所给出的术语 Query Builder。他的解决方案会起作用,但它有一半没有使用查询生成器(它只是一个 copy/paste 并将你的 SQL 扔进一个原始查询,这基本上与你的查询完全相同之前),因此我觉得有必要为您提供一个额外的选择:
Post::where('post_id', '>', 0)
->where(function($query) {
$query->where(function($subquery) {
$subquery->where('user_id', 1)->where('user_type', 'user');
})->orWhere(function($subquery) {
$subquery->whereIn('user_id', [1])->where('user_type', 'page');
});
})
->orderBy('post_id', 'DESC')
->get();
出于可读性目的,我将变量名称保持简短,但匿名函数($query
和 $subquery
)中的参数是查询构建器实例。
如何在 Laravel 5.3 中编写复杂的查询?我正在尝试但没有得到我期望的结果。
查询
SELECT * FROM (SELECT posts.post_id
FROM posts
WHERE ((posts.user_id = 1 AND posts.user_type = 'user')
OR (posts.user_id IN (1) AND posts.user_type = 'page'))) posts
WHERE posts.post_id > '0' ORDER BY posts.post_id DESC
请使用 Laravel 查询生成器帮我写这个。
这是你的答案。
$MyQuery = DB::table(DB::Raw("(SELECT
posts.post_id
FROM
posts
WHERE
(
(
posts.user_id = 1
AND posts.user_type = 'user'
)
OR
(
posts.user_id IN (1)
AND posts.user_type = 'page'
)
)
)"))
->where('posts.post_id','>',"0")->orderBy("posts.post_id" , "DESC")->get();
像这样使用 ->toSql()
尝试打印一次查询
echo $MyQuery = DB::table(DB::Raw("(SELECT
posts.post_id
FROM
posts
WHERE((
posts.user_id = 1
AND posts.user_type = 'user'
)
OR(
posts.user_id IN (1)
AND posts.user_type = 'page'
)))"))
->where('posts.post_id','>',"0")->orderBy("posts.post_id" , "DESC")->toSql();
die();
@Punit Gajjar 提供了一种解决方案,但这并不是您的问题所给出的术语 Query Builder。他的解决方案会起作用,但它有一半没有使用查询生成器(它只是一个 copy/paste 并将你的 SQL 扔进一个原始查询,这基本上与你的查询完全相同之前),因此我觉得有必要为您提供一个额外的选择:
Post::where('post_id', '>', 0)
->where(function($query) {
$query->where(function($subquery) {
$subquery->where('user_id', 1)->where('user_type', 'user');
})->orWhere(function($subquery) {
$subquery->whereIn('user_id', [1])->where('user_type', 'page');
});
})
->orderBy('post_id', 'DESC')
->get();
出于可读性目的,我将变量名称保持简短,但匿名函数($query
和 $subquery
)中的参数是查询构建器实例。