我有三个模型 Employer
、Job
和 Transaction
雇主
可以有很多工作
Job
可以有多个 Transaction
我正在尝试使用 ActiveRecord 获取所有没有 Transaction
记录的 Employer
。
在我的雇主模型中,我定义了关系来查找与该雇主相关的所有工作和交易:
/**
* @return \yii\db\ActiveQuery
*/
public function getJobs() {
return $this->hasMany(Job::className(), ['employer_id' => 'employer_id']);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTransactions() {
return $this->hasMany(Transaction::className(), ['job_id' => 'job_id'])->via("jobs");
}
关于执行此操作的最佳方法有什么想法吗?
最佳答案
SQL:
SELECT employer.*
FROM employer
WHERE employer.employer_id NOT IN
(
SELECT employer.employer_id
FROM employer
INNER JOIN job ON employer.employer_id = job.employer_id
INNER JOIN transaction ON job.job_id = transaction.job_id
)
使用 Yii2:
function getThoseWithoutTransaction() {
return Employer::find()->where(['not in', 'employer_id',
(new Query())
->select('employer.employer_id')
->from('employer')
->innerJoin('job', 'employer.employer_id = job.employer_id')
->innerJoin('transaction', 'job.job_id = transaction.job_id')
)]
);
}
但是我没有测试过。但希望它是正确的。并且可能有更好的解决方案。
关于php - 使用 ActiveRecord 的 Yii2 查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366321/