2017-08-18 10 views
0

私はこのクエリをmysqlでテストしています。 鉱山のコントローラでは動作しません。誰でもそれを修正できますか?laravelの生のクエリのSqlの正しい構文

$albi = DB::table(DB::raw("(SELECT 
          albi.id, 
          albi.CoverAlbo, 
          albi.Nazione, 
          albi.Editore, 
          albi.NomeCollanaUfficiale, 
          albi.AnnoPubblicazione 
          FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id 
          AND au.user_id = $user_id 
          WHERE au.albi_id IS NULL)")); 

これはエラーです:

SQLSTATE[42000]: Syntax error or access violation: 1248 Every derived table must have its own alias

は私を助けてください!

答えて

0

あなたがDB::table()を使用して、(サブクエリを作成する)その中rawクエリを配置し、それにエイリアスを与えていないためです。

あなただけのようなものに最後の行を変更する必要がある必要があります動作するように上記のコードを取得するには:

WHERE au.albi_id IS NULL) as t1")); //notice the "t1" alias 

それとも、可能性DB::select()

$albi = DB::select("SELECT 
         a.id, 
         a.CoverAlbo, 
         a.Nazione, 
         a.Editore, 
         a.NomeCollanaUfficiale, 
         a.AnnoPubblicazione 
         FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id 
         AND au.user_id = $user_id 
         WHERE au.albi_id IS NULL"); 

これを注意してくださいされます同じではないselect()としてDB::table()->select()


それとも、ただクエリビルダを使用することができます。

$albi = DB::table('albi') 
    ->select('id', 'CoverAlbo', 'Nazione', 'Editore', 'NomeCollanaUfficiale', 'AnnoPubblicazione') 
    ->leftJoin('albi_user', 'albi.id', 'albi_user.alibi_id') 
    ->where('albi_user.user_id', $user_id) 
    ->whereNull('albi_user.albi_id') 
    ->get(); 

・ホープ、このことができます!

+0

Mitico !!!!!それは今作動する!!ありがとうございます! – Marko

0

テーブル名の代わりにエイリアスを使用する必要があります。だから、これを試してみてください。

$albi = DB::table(DB::raw("(SELECT 
          a.id, 
          a.CoverAlbo, 
          a.Nazione, 
          a.Editore, 
          a.NomeCollanaUfficiale, 
          a.AnnoPubblicazione 
          FROM albi AS a LEFT JOIN albi_user AS au ON a.id = au.albi_id 
          AND au.user_id = $user_id 
          WHERE au.albi_id IS NULL)")); 
+0

残念ながら動作しません!同じエラー.....私は狂っているよ! – Marko