php - 使用 ActiveRecord 的 Yii2 查询生成器

标签 php mysql yii2

我有三个模型 EmployerJobTransaction

雇主可以有很多工作

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/

相关文章:

javascript - Yii2 Ajax 提交不起作用

php - 我正在使用的选择查询不起作用。有人可以指导我正确的方法吗?

php - mysql:更新记录给出 "Truncated incorrect DOUBLE value"错误

php - 检查页面 View 是否唯一的简单方法?

即使给出了不同的 where 子句,MySQL 触发器也会更新所有行

php - MySql:根据时间戳和动态间隔选择数据

mysql - Yii2 mysql 如何将记录插入到列值已经存在且应该是唯一的表中?

php - Bootstrap 模式中的表单不会将 PHP 值发布到另一个页面

php - 势不可挡的循环 X(

pdf - kartik GridView Yii2 - 如何配置 PDF 的导出配置(页眉、页脚、标题)