2012-05-10 3 views
2

クエリビルダKohanaのデータベースクエリビルダは、生のクエリとして使用した場合、SQLは動作しますが、私は得るように見えるカント</p> <p>私の現在のプロジェクトのためにローカライズされた文字列を取得するために、私はCOALESCEを使用するクエリに取り組んでいるのJOIN&ON&AND

LEFT JOIN text as text_se 
ON (main_table.text = text_se.id) 
AND (text_se.lang_code = 'SV') 

このコードでこのように構成された結合:

->join(array('text', 'text_se', 'LEFT') 
    ->on('main_table.text', '=', 'text_se.id') 
    ->on('text_se.lang_code', '=', 'SV') 

のみ

になり
LEFT JOIN text as text_se 
ON (main_table.text = text_se.id AND text_se.lang_code = 'SV') 

どちらも同じことをしていません... JOINステートメントの後にANDを使用して誰かに助けてもらえますか?

+0

あなたが投稿できます完全な生のクエリ? – badsyntax

答えて

1

なぜどこ使用しない:これは、3.1.xの中で動作しているように見えます

->join(array('text', 'text_se', 'LEFT') 
->on('main_table.text', '=', 'text_se.id') 
->where('text_se.lang_code', '=', 'SV') 
+0

これはこのインスタンスでは機能しますが、whereパラメータはwhere句にのみ影響します。クエリをさらに最適化するために、複数の条件でテーブルを結合することが望ましい場合もあります。 –

+0

この場合LEFT JOINはINNER JOINのように動作します – Kalim

5

それともあなたがこれを行うことができます....

->join(array('text', 'text_se'), 'LEFT') 
    ->on('main_table.text', '=', DB::Expr('text_se.id AND text_se.lang_code = "SV"')) 
1

->join(array('text', 'text_se', 'LEFT') 
->on('main_table.text', '=', DB::expr('text_se.id')) 
->on('text_se.lang_code', '=', DB::expr('SV')) 
関連する問題

 関連する問題