我有一个有序项目列表,根据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' 您当前项目的订单值的参数您将获得 prevnext.

有帮助吗?

解决方案

是的,问题是您不在字段数组中包括订单字段。

$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';

因此,为了解决它,我做了以下操作:

  • 添加一个称为“ Ascize_order”的虚拟字段,并为此设置订单:

    $this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)';
    
    $this->TestQuestion->order = array(
        $this->TestQuestion->alias . '.examination_order'
    );
    
  • 在查找邻居调用中,将“字段”设置为“ acevion_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