我正在使用cakephp 2.4.5。我想找到关联表的最后一条记录。以下是我的代码
$Latest = $this->ParentModel->find('first',array(
'conditions' => array('ParentModel.id'=>$id),
'order' => array('ParentModel.AssociatedModel.id' => 'DESC')
));
此代码缺少ParentModel.AssociatedModel.id
的列错误,但id列肯定存在。它首先看起来是否合适?如果没有,我该如何修复这个部分或者是否有更好的实现?谢谢
答案 0 :(得分:1)
你不可能做到"交叉条件"虽然是关联的模型,但您可以使用Containable
行为来过滤关联的模型。
为此,您必须通过以下方式将行为绑定到模型:
public $uses = array('Containable');
然后再进行查询:
$this->ParentModel->find('first', array(
'conditions' => array('ParentModel.id' => $id),
'contain' => array(
'AssociatedModel' => array(
'limit' => 1,
'order' => array('id DESC')
)
)
));
这将为您提供父模型和最后一个关联模型。
答案 1 :(得分:1)
Have you tried to read the manual about retrieving data?在那里可以清楚地解释。
如果 AssociatedModel与ParentModel以某种方式关联with one of the four association types,则必须使用以下语法:
$Latest = $this->ParentModel->find('first',array(
'contain' => array('AssociatedModel'),
'conditions' => array('ParentModel.id' => $id),
'order' => array('AssociatedModel.id' => 'DESC')
));
使用recursive或contains()确保包含其他模型。 See this page about Containable
如果您的DB中的字段名称确实包含一个点,那么CakePHP2会出现问题,因为它使用点表示法作为分隔符。至少我从来没有在数据库领域使用过一个点,它是可行的,但没有多大意义,显然会破坏Cake,不知道你是否可以解决这个问题。
答案 2 :(得分:0)
我想它应该是这样的
$Latest = $this->ParentModel->AssociatedModel->find('first',array(
'conditions' => array('ParentModel.id'=>$id),
'order' => array('AssociatedModel.id DESC')
));
检查它是否正确。