簡體   English   中英

Laravel 5查詢生成器中存在SQL

[英]SQL exists in Laravel 5 query builder

早上好,

我已經花了很多時間嘗試將此查詢(返回一個stdClass數組)轉換為查詢生成器,以便可以將對象作為Eloquent模型返回。

這是查詢看起來像未翻譯的樣子:

$anketa = DB::select( DB::raw("SELECT * 
                                         FROM v_anketa a 
                                        WHERE not exists (select 1 from user_poeni where anketa_id=a.id and user_id = :lv_id_user)
                                        Order by redni_broj limit 1"
                                     ), array(   'lv_id_user' => $id_user,
                ));

我已經嘗試過了,但是它在子查詢的內部附近給出了語法錯誤:

$anketa = V_anketa::selectRaw("WHERE not exists (select 1 from user_poeni where anketa_id=a.id and user_id = :lv_id_user)", array('lv_id_user' => $id_user,)
                            )->orderBy('redni_broj')->take(1)->first();

問題是這存在並且其中有一個子查詢。 關於這種特殊情況,我找不到任何東西。

假設每個表都有一個合適的口才模型。 V_anketa是一個視圖。 該數據庫是postgresql。

就查詢而言,我相信這應該可行:

$anketa = V_anketa::whereNotExists(function ($query) use ($id_user) {
                $query->select(DB::raw(1))
                      ->from('user_poeni')
                      ->where('anketa.id', '=', 'a.id')
                      ->where('user_id', '=', $id_user);
            })
           ->orderBy('redni_broj')
           ->first();

但是我不清楚“假設每個表都有一個Eloquent模型”是什么意思,而“ V_anketa”是一個視圖是什么意思...

假設SQL查詢正確,則應該可以:

$anketa = DB::select(sprintf('SELECT * FROM v_anketa a WHERE NOT EXISTS (SELECT 1 FROM user_poeni WHERE anketa_id = a.id AND user_id = %s) ORDER  BY redni_broj LIMIT 1', $id_user));

如果要取回一個Builder實例,則需要指定表:

$anketa = DB::table('')->select('');

但是,如果要獲取Eloquent Model實例(例如,使用關系),則需要使用Eloquent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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