簡體   English   中英

Laravel 4-Laravel口才查詢的SQL查詢

[英]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() 也沒有生在fromwhereRaw需要。

唯一不尋常的事情是原始位置,因為您不想將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM