如何使用orOnCondition在Yii2中定义关系

如何使用orOnCondition在Yii2中定义关系,yii2,database-relations,Yii2,Database Relations,我正在将数据库中的更改记录到一个名为audit_field的表中。对于给定的模型,我希望检索该模型以及一些相关模型的所有audit_字段 例如: <?php class Job extends ActiveRecord { public function getAuditFields() { $link = []; // what do I put here to get "1=1" ? return $this->hasMany(

我正在将数据库中的更改记录到一个名为audit_field的表中。对于给定的模型,我希望检索该模型以及一些相关模型的所有audit_字段

例如:

<?php
class Job extends ActiveRecord
{
    public function getAuditFields()
    {

        $link = []; // what do I put here to get "1=1" ?

        return $this->hasMany(AuditField::className(), $link)
            ->orOnCondition([
                'audit_field.model_id' => $this->job_id, 
                'audit_field.model_name' => get_class($this),
            ])
            ->orOnCondition([
                'audit_field.model_id' => ArrayHelper::map($this->getJobTeches()->all(), 'id', 'id'),
                'audit_field.model_name' => 'app\models\JobTech',
            ]);
    }
    public function getJobTeches()
    {
        return $this->hasMany(JobTech::className(), ['job_id' => 'job_id']);
    }
}
我得到的是:

SELECT * FROM audit_field WHERE (1=0) AND (...my or conditions...)

找到答案,不要使用hasMany,只需返回ActiveQuery:


这不允许您查询模型的关系,如->joinWith['auditFields]
SELECT * FROM audit_field WHERE (1=0) AND (...my or conditions...)
<?php
class Job extends ActiveRecord
{
    public function getAuditFields()
    {
        return AuditField::find()
            ->orOnCondition([
                'audit_field.model_id' => $this->job_id, 
                'audit_field.model_name' => get_class($this),
            ])
            ->orOnCondition([
                'audit_field.model_id' => ArrayHelper::map($this->getJobTeches()->all(), 'id', 'id'),
                'audit_field.model_name' => 'app\models\JobTech',
            ]);
    }
}