2015-12-04 7 views
5

「は」を生成しません:CakePHPの3 QueryBuilder:あなたはそのような何かを書くとき、いくつかの値のための条件は、CakePHP 2で声明

$Model->find('all', ['conditions' => ['field' => 1]]); 

あなたはこのようなクエリを取得します:

SELECT * FROM model WHERE model.field = 1; 

それとも、そのような何か書くとき:あなたは、クエリを取得します

$Model->find('all', ['conditions' => ['field' => [1,2,3,5]]]); 

をこのように:

SELECT * FROM model WHERE model.field IN (1,2,3,5); 

つまり、引数の型によって自動的に 'IN'ステートメントが生成されます。 CakePHPの3の一方

あなたがエラーを受け取ることになります

$Table->find()->where(['field' => [1,2,3]])->all(); 

を書き、例えばそれは、このように文を生成するので、

を整数に値を変換できません:

SELECT * FROM table WHERE table.field = Array(); 

これはバグや機能ですか?

答えて

1

あなたはCakePHPの3の列のデータ型を指定する必要がありAccording to the official docs: -

$Table->find()->where(['field' => [1,2,3], ['field' => 'integer[]']])->all(); 

integer[]整数の配列を期待するケーキを語っています。

また、あなたの条件にINを含めることができます - 唯一の整数値が渡された場合に予想されるようINが動作するように、それはまだない場合

$Table->find()->where(['field IN' => [1,2,3]])->all(); 

どちらの例は、配列にデータをキャストします。

+0

ありがとうございました。私はそれが以前の、より単純な方法でもはやなぜ機能しないのか疑問に思います。これはパフォーマンスに関するものですか? – sikor

+1

CakePHP 2で動作する方法は多分あいまいで、乱用する可能性があります。例えば、IN条件が実際に意図されているというチェックはなかったので、誤って配列が渡された場合には、IN条件を使用して有効なクエリが生成されます。 CakePHP 3のこの変更は不便に思えるかもしれませんが、私にとってはあなたの意図する条件を知っておくべきであると考えています。 – drmonkeyninja

+2

"IN"を忘れても配列引数を指定すると、3.1.2のように(最善の方法で)追加したいのですが、汎用の代わりに便利な "値を文字列に変換できません"というエラーが表示されます例外。私は主にこれを言っているので、後でこのエラーが発生したときに、このページがGoogleの結果に表示されます。 :-)うまくいけば、それは同じ状況で他の人を助けてくれるでしょう! –

関連する問題