[英]Laravel 4 - SQL query to Laravel Eloquent query
我正在做一个学校项目,正在尝试使查询工作。
SELECT *
FROM `ziekmeldingen` AS a
WHERE NOT EXISTS
(SELECT *
FROM `ziekmeldingen` AS b
WHERE `ziek` = 1
AND a.personell_id = b.personell_id)
型号名称:ZiekmeldingenModel
我尝试了两件事,都没有用->
$medewerkers = ZiekmeldingenModel::whereNotExists(function($query)
{
$query->select()->from('ziekmeldingen AS b')->where('ziek', '=', '1')->where('ziekmeldingen.personell_id', '=', 'b.personell_id');
})->get();
return $medewerkers;
和
$medewerkers = ZiekmeldingenModel::raw('SELECT * FROM `ziekmeldingen` as a WHERE NOT EXISTS ( SELECT * FROM `ziekmeldingen` as b WHERE `ziek` = 1 AND a.personell_id = b.personell_id)')->get();
他们两个都返回表中的所有结果,而它只应返回1个结果(我已经测试了原始查询,它可以工作)。
编辑:忘了提及我在模型中使用关系。 因此原始解决方案可能仍然无法正常工作
找到了答案。 必须同时使用我尝试过的两种方法。
$medewerkers = ZiekmeldingenModel::select()
->from(DB::raw('`ziekmeldingen` AS a'))
->whereNotExists(function($query){
$query->select()
->from(DB::raw('`ziekmeldingen` AS b'))
->whereRaw('`ziek` = 1 AND a.personell_id = b.personell_id');
})->get();
return $medewerkers;
感谢您的帮助和努力。
绝对不需要select()
。 也没有生在from
或whereRaw
需要。
唯一不寻常的事情是原始位置,因为您不想将table.field
绑定并视为字符串。 另外,如果为表加上前缀,则可以对整个子句使用whereRaw
,否则最终将得到DB_PREFIX_a.personell_id
类的DB_PREFIX_a.personell_id
,因此显然是错误的。
这是您的操作方式:
$medewerkers = ZiekmeldingenModel::from('ziekmeldingen AS a')
->whereNotExists(function ($q) {
$q->from('ziekmeldingen AS b')
->where('ziek', 1)
->where('a.personell_id', DB::raw('b.personell_id'))
// or:
// ->whereRaw('a.personell_id = b.personell_id');
})->get();
使用take()方法,但是,如果不对结果进行排序,则返回的记录可能是任何结果。
$medewerkers = ZiekmeldingenModel::raw('SELECT * FROM `ziekmeldingen` as a WHERE NOT EXISTS ( SELECT * FROM `ziekmeldingen` as b WHERE `ziek` = 1 AND a.personell_id = b.personell_id)')->take(1)->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.