Findallbyattributes With Related Model

时间:2014-04-15 18:58:14

标签: yii

我正在尝试使用相关的模型列作为标准之一findAllByAttributes,但我不断收到CDbException陈述the column cannot be found

这是我的模特关系:

public function relations() {
  return array(
    'MetaData' => array(self::BELONGS_TO, 'ProjectMeta', 'wbse_or_io'),
  );
}

这是我的尝试查询:

$listing = ProjectIndex::model()->with('MetaData')
  ->findAllByAttributes(array(
    'report_date'=>$reportDate,
    'MetaData.cost_centre'=>$costCentre
  )
);

从我通过Google / StackOverflow /这些论坛阅读的内容,我应该能够引用MetaData关系中的cost_centre列。但我不断收到以下错误:

Table "tbl_project_index" does not have a column named "MetaData.cost_centre"

如何引用相关表格列?

2 个答案:

答案 0 :(得分:11)

检查出来

$listing = ProjectIndex::model()->with(
    'MetaData'=>array(
        'condition'=>'cost_centre = :cost_centre', 
        'params'=>array('cost_centre'=>$costCentre))
   )
   ->findAllByAttributes(array('report_date'=>$reportDate));

答案 1 :(得分:1)

属性数组中的属性不能用于相关模型。您可以查看findAllByAttributes的来源以获得更好的解释。但是,除了Alex的答案之外,您还可以将相关属性作为条件字符串或CDbCriteria数组传递。

$listing = ProjectIndex::model()->with('MetaData')->findAllByAttributes(
    array('report_date'=>$reportDate),
    'cost_centre = :cost_centre',
    array(':cost_centre'=> $costCentre)
);

或者

$listing = ProjectIndex::model()->with('MetaData')->findAllByAttributes(
    array('report_date'=>$reportDate),
    array(
        'condition' =>'cost_centre = :cost_centre',
        'params'=>array(':cost_centre'=> $costCentre)
    ),
);