cakephp:隣人を見つける、「名前」または「注文」で注文する
-
19-09-2019 - |
質問
INTフィールドに従って注文した注文されたアイテムのリストがあります order
。私はCakePHP 1.2でギャラリーを作成しています。 id
.
この結果を取得するために、私は検索関数に「注文」パラメーターを含め、それに入力しました 'Item.order'=>'DESC'
. 。それでも結果は次のとおりです id
注文リスト。
私の質問は、私は何が間違っているのですか?私のコントローラー:
$this->Item->id = 16;
$neighbours = $this->Item->find('neighbors', array(
'order' => array('Item.order'=>'DESC'),
'fields' => array('id','name')
));
私の解決策
別のアプローチを試みました。私のコードは今ジョブを行い、次のように見えます:
$order = $this->Item->findById(6);
$neighbours = $this->Item->find('neighbors', array(
'field' => 'order',
'value' => $order['Item']['order']
));
パラメーターを設定します 'field'
フィールドへの順序フィールドになり、 'value'
あなたの現在のアイテムの注文値へのパラメーターあなたは prev
と next
.
解決
ええ、問題は、フィールドアレイに注文フィールドを含めていなかったことです。
$neighbours = $this->Item->find('neighbors', array(
'order' => 'order DESC',
'fields' => array('id', 'name', 'order')
));
競合するフィールド名を持つ関連モデルがない限り、 Item.
モデルプレフィックス(私は通常、そのようなエラーを避けるためにとにかくしますが)あなたは元の構文が機能した場合に機能します [Item.]order
「フィールド」で
最後に、ソリューションは最適ではありません。必要ではないときに2つのSQLクエリを作成します。そして、「フィールド」は、私が知っている限り、クエリオプションではありません。これは、実際にテーブル内のすべてのフィールドを返していることを意味します。
他のヒント
私はこれに問題がありました。基本的に、ユーザーセッションごとにランダムに注文する必要がある質問のリストがあります。
私はモデルの順序をこのようなものに設定していました:
'FIELD(TestQuestion.id, 3, 1, 5)';
これは通常のクエリでは正常に機能しましたが、隣人を見つけることはModel.phpの2897行で阻害されます。
$query['order'] = $field . ' DESC';
それで、それを回避するために、私は次のことをしました:
「examinis_order」と呼ばれる仮想フィールドを追加し、次のように順序を設定します。
$this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)'; $this->TestQuestion->order = array( $this->TestQuestion->alias . '.examination_order' );
Find Neighbors Callでは、「フィールド」を「examinis_order」に設定し、以前に見つかったように値をインデックスに設定します。
$neighbors = $this->TestQuestion->find( 'neighbors', array( 'field' => 'examination_order', 'value' => $testQuestion[$this->TestQuestion->alias]['examination_order'], 'conditions' => $conditions ) );