PHPアプリケーションでpropel ORMを使用しています。Propel "AND NOT"クエリ
ドキュメントを読んでから、私はこのタイプの要求を行う方法を見つけ出すことはできません。
SELECT x FROM table where col1 = 'xxx' and not(col2=1 AND col3=2);
純粋Propelのロジックを使用してこの要求を実行するためのクリーンな方法は何ですか?
おかげ
PHPアプリケーションでpropel ORMを使用しています。Propel "AND NOT"クエリ
ドキュメントを読んでから、私はこのタイプの要求を行う方法を見つけ出すことはできません。
SELECT x FROM table where col1 = 'xxx' and not(col2=1 AND col3=2);
純粋Propelのロジックを使用してこの要求を実行するためのクリーンな方法は何ですか?
おかげ
に相当しますあなたのクエリ:あなたは2を推進使用していると仮定すると、
SELECT x FROM table where col1 = 'xxx' and (col2 != 1 OR col3 != 2);
は、あなたが欲しいものを達成することができるはずで:
$result = TableQuery::create()
->filterByCol1('xxx')
->filterByCol2(1, Criteria:NOT_EQUAL)
->_or()
->filterByCol3(2, Criteria:NOT_EQUAL)
->find();
探している完全なクエリは、次のとおりです。
$books = TableQuery::create()
->condition('cond1', 'col1 = ?', 'xxx')
->condition('cond2', 'col2 != ?', 1)
->condition('cond3', 'col3 != ?', 2)
->combine(array('cond2', 'cond3'), 'or', 'cond23')
->where(array('cond1', 'cond23'), 'and')
->find();
それが作成されます。
それは、新しいcond23で又はオペレータとCOND2とCOND3を組み合わせ
cond23 = cond2 or cond3
ようにとオペレータとcond23とCOND1を兼ね備え最終的なクエリは
where(cond1 and cond23)
となります3210
論理的には、これはcol1 = 'xxx' AND(col2!= 1 OR col3!= 2)...と同じですが、これは ' - > combine(array( 'cond2'、 'cond3 ')、'、 '、...) 'を返し、条件1、'と 'を組み合わせます。私はDBAであるので、もう助けになることはできません... ORMは私の死の敵です。 –
あなたの答えをありがとう。 –
ありがとうございます。私は以前Combined()を使っていましたが、奇妙な振る舞いに直面しました: - >条件( 'cond1'、 'x!=?'、1) - >条件( 'cond2'、 'y!=? '、2) - >コンディション(' cond3 '、' z!=? '、3) - >コンビネーション(array(' cond1 '、' cond2 '、' cond3 ')'、 'cond12') 結果: SELECT ... AND(!!!(X = 1またはy = 2)またはZ = 3)実際には同じものではありません ... –