CAKEPHP:查找邻居,订购“名称”或“订单”
-
19-09-2019 - |
题
我有一个有序项目列表,根据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)';
这对于普通查询效果很好,但是发现邻居在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 ) );
不隶属于 StackOverflow