$purples = Purple::find()->leftJoin('green', 'purple.code != green.code')->all();
// or
$purples = Purple::findBySql('Select purple.* FROM purple LEFT JOIN green ON purple.code != green.code')->all();
Thanks for your response. This still didn’t work but wrote another sql which later worked. My challenge now is that my filter doesn’t work with the custom query.
Consider creating a virtual attribute in Purple model (or PurpleSearch model) which represents the result of custom query whether it has the counterpart in Green model.
class PurpleSarch extends Purple
{
...
public $hasGreen;
...
public function search($params)
{
...
if ($this->hasGreen === true) {
$query->andWhere('(SELECT COUNT(*) FROM green WHERE green.code = purple.code) <> 0');
} elseif ($this->hasGreen === false) {
$query->andWhere('(SELECT COUNT(*) FROM green WHERE green.code = purple.code) = 0');
}
...
}
}