2017-12-13 10 views
1

2つのテーブルを結合するCakePHP 2(バージョン2.10.5)のクエリがあります.Model1でクエリを実行し、Model2とModel3に参加しましょう。 Model2.field_1とModel3.field_2でデータを注文したいのですが。CakePHP 2での順序を定義する正しい方法2

私はこの方法を使用します。

'order' => ['Model2.field_1', 'Model3.field_2'] 

またはこの方法は:

'order' => ['Model2.field_1' => 'ASC', 'Model3.field_2' => 'ASC'] 

のみModel2.field_1は、クエリの順序部分に追加されます。私はこの方法を使用する場合

'order' => 'Model2.field_1, Model3.field_2' 

を両方のフィールドがクエリのための一部に追加されているCakePHPはそれらを正しく解釈するので、それらが引用され、すべてされています。

これはなぜですか?正しい方法は何ですか?

+0

クエリとモデル間の関連付けを追加できますか?それは多くを助けるだろう –

答えて

1

あなたの最初の2つの例は、CakePHP 2にあなたがRetrieving Your Data下の公式ドキュメントでorderの使用例を見つけることができますorderを使用する正しい方法でなければなりません。

だからあなたが使用する必要があり、次のいずれか -

'order' => ['Model2.field_1', 'Model3.field_2'] 

または: -

'order' => ['Model2.field_1' => 'ASC', 'Model3.field_2' => 'ASC'] 

をどちらも同じと解釈されます。 documentation for Modelsには、orderの利用可能な形式が明示的に記述されています。

これらがクエリで機能しない場合、ここには示されていない別の問題があると私は思っています。私は、Cakeがクエリを生成しているとき、クエリに関係のない命令文を無視すると信じています。たとえば、has-many containで注文しようとしている場合や、ページネーションを使用して正しく設定されていない列を注文しようとしている場合(docs:pagination orderingを参照)。

関連する問題