Cakepp : 이웃 찾기, '이름'또는 '순서'에 주문
-
19-09-2019 - |
문제
int 필드에 따라 주문 된 주문 항목 목록이 있습니다. order
. CakePHP 1.2에서 이전 및 다음 버튼이있는 갤러리를 만들고 있으며 주문에 따라 이전 및 다음 항목에 링크해야합니다. id
.
이 결과를 얻으려면 'Order'매개 변수를 찾은 함수에 포함 시켰고 'Item.order'=>'DESC'
. 여전히 결과는 an입니다 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
"필드"에서
마지막으로 솔루션은 최적이 아니며 필요하지 않을 때 두 개의 SQL 쿼리를 만들고 있습니다. 그리고 '필드'는 내가 알고있는 한 쿼리 옵션이 아닙니다. 이는 실제로 테이블의 모든 필드를 반환하고 있음을 의미합니다.
다른 팁
나는 이것에 문제가 있었다. 기본적으로 사용자 세션 당 무작위로 주문 해야하는 질문 목록이 있습니다.
모델의 순서를 다음과 같은 것으로 설정했습니다.
'FIELD(TestQuestion.id, 3, 1, 5)';
이것은 정상적인 쿼리에 대해 잘 작동했지만 이웃을 찾는 것은 model.php에서 2897 행에 의해 결정됩니다.
$query['order'] = $field . ' DESC';
그래서 그것을 돌아 다니기 위해 다음을 수행했습니다.
'Examer_order'라는 가상 필드를 추가하고 순서를 다음과 같이 설정하십시오.
$this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)'; $this->TestQuestion->order = array( $this->TestQuestion->alias . '.examination_order' );
이웃 찾기 호출에서 '필드'를 'Eamply_order'로 설정하고 이전에 찾은대로 값을 색인으로 설정하십시오.
$neighbors = $this->TestQuestion->find( 'neighbors', array( 'field' => 'examination_order', 'value' => $testQuestion[$this->TestQuestion->alias]['examination_order'], 'conditions' => $conditions ) );