Sometime, in a many-to-many relation, you need to retrieve AR that aren't linked. In practice, AR with null value in the join table. So you implements a criteria like this :
public function scopeUnused( $useAnd = true ) { $join = " left outer join composed_by j on t.ID = j.ID "; $condition = ' j.ID Is Null'; $criteria = new CDbCriteria(); $criteria->join = $join; $criteria->condition = $condition; self::getDbCriteria()->mergeWith( $criteria , $useAnd ); return $this; }
You face the problem that your AR's pk are empty ?!! It come from the fact that the generated sql query returns by default all columns (select *). To overcome this, you need to explicitly specify the columns of your AR in the select property of the DBCriteria
public function scopeUnused( $useAnd = true ) { $join = " left outer join composed_by j on t.ID = j.ID "; $condition = ' j.ID Is Null'; $select = ' t.ID, t.FIELD1, t.FIELDX'; $criteria = new CDbCriteria(); $criteria->join = $join; $criteria->select = $select; $criteria->condition = $condition; self::getDbCriteria()->mergeWith( $criteria , $useAnd ); return $this; }
Be the first person to leave a comment
Please login to leave your comment.