문제

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
        )
    );
    
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top