TomCDona
TomCDona

Reputation: 150

Findallbyattributes With Related Model

I'm trying to do a findAllByAttributes using a related model column as one of the criteria, but I keep getting a CDbException stating the column cannot be found.

Here's my model Relationship:

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

And here's my attempted query:

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

From what I've read through Google/StackOverflow/these forums, I should be able to reference the cost_centre column in the MetaData relationship. But I keep getting the following error:

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

How do I reference the related table column?

Upvotes: 3

Views: 6241

Answers (2)

Alex
Alex

Reputation: 8072

Check this out

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

Upvotes: 11

topher
topher

Reputation: 14860

The attributes in the attributes array cannot be for the related models. You can look at the source for findAllByAttributes for a better explanation. You can, however, pass the related attribute as a condition string or CDbCriteria array, in addition to Alex's answer.

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

Or

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

Upvotes: 1

Related Questions