Вопрос

У меня есть список заказанных предметов, заказанных в соответствии с полем 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 в "полях"

Наконец, ваше решение не является оптимальным, вы делаете два запроса SQL, когда вам это не нужно. И «поле» не является вариантом запроса, насколько я знаю, что на самом деле означает, что вы возвращаете все поля в таблице.

Другие советы

У меня были проблемы с этим. В основном у меня есть список вопросов, которые необходимо упорядочить случайным образом (только один раз) на сеанс пользователя.

Я установил порядок модели на что -то вроде этого:

'FIELD(TestQuestion.id, 3, 1, 5)';

Это отлично сработало для нормальных запросов, но поиск соседей задерживается по строке 2897 в модели.php:

$query['order'] = $field . ' DESC';

Итак, чтобы обойти это, я сделал следующее:

  • Добавьте виртуальное поле с именем «examination_order» и установите заказ на это:

    $this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)';
    
    $this->TestQuestion->order = array(
        $this->TestQuestion->alias . '.examination_order'
    );
    
  • В звонке «Найти соседи» установите «поле» на «exament_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