Pregunta

Tengo una lista de artículos pedidos, ordenados de acuerdo con la order campo int. Estoy creando una galería en CakePHP 1.2 que tiene un anterior y el botón siguiente y esos deben vincular al elemento anterior y al lado de acuerdo a su pedido, no según su id.

Con el fin de conseguir este resultado he incluido el parámetro 'orden' a la función de búsqueda, y se pueblan con 'Item.order'=>'DESC'. Aún así, el resultado es una lista ordenada id.

Mi pregunta es: ¿qué hago mal? Mi controlador:

$this->Item->id = 16;

$neighbours = $this->Item->find('neighbors', array(
    'order' => array('Item.order'=>'DESC'),
    'fields' => array('id','name')
));

Mi Solución

He intentado un enfoque diferente. Mi código ahora hace el trabajo y se ve de la siguiente manera:

$order = $this->Item->findById(6);

$neighbours = $this->Item->find('neighbors', array(
    'field' => 'order',
    'value' => $order['Item']['order']
));

Al establecer el parámetro 'field' al campo será el campo de ordenación, y establecer el parámetro 'value' al valor del orden del elemento actual que obtendrá el prev y next.

¿Fue útil?

Solución

Sí, el problema era que no estaba incluido el campo de orden en la matriz de campos.

$neighbours = $this->Item->find('neighbors', array(
    'order' => 'order DESC',
    'fields' => array('id', 'name', 'order')
));

A menos que haya modelos relacionados con los nombres de campos en conflicto que no es necesario incluir el modelo Item. prefijo (aunque yo suelo hacer de todos modos para evitar este tipo de errores.) Eres la sintaxis original, funcionaría si se hubiera incluido en "campos [Item.]order "

Por último, la solución no es óptima, está cometiendo dos consultas SQL cuando no es necesario. y 'campo' no es una opción de consulta por lo que yo soy consciente de que en realidad significa que se está volviendo todos los campos en la tabla.

Otros consejos

Yo estaba teniendo problemas con esto. Básicamente tengo una lista de preguntas que necesitan ser ordenados aleatoriamente (sólo una vez) por sesión de usuario.

Yo estaba sentado el orden del modelo a algo como esto:

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

Esto funcionó bien para consultas normales, pero encontrar vecinos se ve obstaculizado por la línea 2897 en model.php:

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

Así que para conseguir alrededor de él, hice lo siguiente:

  • Añadir un campo virtual llamada 'examination_order', y dejó el fin de que:

    $this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)';
    
    $this->TestQuestion->order = array(
        $this->TestQuestion->alias . '.examination_order'
    );
    
  • En los vecinos llaman a encontrar, establecer el 'campo' a 'examination_order', con el valor ajustado en el índice que se encuentran previamente:

    $neighbors = $this->TestQuestion->find(
        'neighbors',
        array(
            'field' => 'examination_order',
            'value' => $testQuestion[$this->TestQuestion->alias]['examination_order'],
            'conditions' => $conditions
        )
    );
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top