我遇到问题,我需要从单个记录中检索单个字段,没有相关模型,同时使用使用相关模型的条件?
示例:
Categories {name, id}
Keywords {name, id}
Articles {title, text, id, keyword_id, category_id}
我希望在Articles.id
等时检索第一个Article.category_id=3
只要条件不使用外部模型,使用Model->field('model.field',array(conditions))
就可以正常工作。 ($this->Model->recursive=4
无效)。
使用Model->find('first', array(conditions))
工作正常,除了我得到了我不需要和不想要的关联数据这一事实,限制了递归结果,禁用了使用关联模型比较的能力。
任何建议?
我的问题,除了糟糕的调试器:-)通过在使用model->read
方法时限制递归来解决。
但是,长期可能是使用可包含的行为。
答案 0 :(得分:1)
find()方法将fields
参数作为其选项之一。您还可以设置recursive
参数以确保获得适当级别的关系。
根据您的OP,以下内容将在不加入任何关系的情况下检索您想要的内容。
$this->Article->find('first', array('recursive' => -1, 'fields' => array('Article.id'), 'conditions' => array('Article.category_id' => 3)));
如果您的要求比上述要求更强,您可以查看binding models或Containable Behavior。但根据您的描述,以上是适当的解决方案。这些将是过度的IMO。
答案 1 :(得分:1)
我会使用Model->find()
containable行为来限制加载的关联,并使用字段参数将结果限制为所需的字段。