我试图找到将此原始SQL转换为laravel查询构建器的方法:
SELECT value1,value2
FROM foo
WHERE id NOT IN(
SELECT id
FROM foo
HERE foo.key = 'client_location_id');
我已经查看了laravel docks,但是没有任何明确的方法可以将nexted选项转换为他们的查询构建器版本。
答案 0 :(得分:1)
您可以使用whereDoesntHave
功能:
$c = Foo::whereDoesntHave('fooRelation', function ($query) use ($clientLocationId) {
$query->where('key', clientLocationId);
})->get();
如果您在Foo
模型中设置关系,这将起作用,例如:
public function fooRelation()
{
return $this->hasMany(Foo::class);
}
答案 1 :(得分:0)
Laravel的whereNotIn
运算符也接受嵌套查询的函数:
$result = DB::table("foo")
->whereNotIn(function ($query) {
$query->from("foo as f2")
->where("f2.key", "client_location_id")
->select("id");
})->select("value1","value2")->get();
这将产生以下查询(如果您执行->toSQL()
而不是->get()
,则可以验证您获得的查询)
select `value1`, `value2`
from `foo`
where `id` not in (
select `id` from `foo` as `f2` where `f2`.`key` = ?
)
当然我可以指出这个特定的查询不需要嵌套选择,但我假设这只是一个例子。
话虽如此,如果您的项目很大,雄辩的ORM是一个更好的长期解决方案。