[英]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.