【问题标题】:Yii2, how to check relation by a query?Yii2,如何通过查询检查关系?
【发布时间】:2016-12-08 06:59:31
【问题描述】:

我有两个模型,通过联结表建立关系。所以,我试图从 db 中获取一些没有这种关系的模型。 我可以通过this way 做到这一点。 但是如何通过查询来做到这一点?使用 with 或 joinWith 方法,并在联结表列检查 IS NULL

【问题讨论】:

  • 是的,完全一样。

标签: activerecord yii2 relationship


【解决方案1】:

创建联结的模型并将其添加到您的 AR 模型方法中:

/**
 * @return ActiveQuery
 */
public function getJunctions()
{
   return $this->hasMany(Junction::className(), ['someId' => 'id']);
}

然后你可以用它来查询:

$query = Model::find()
    ->joinWith([
        'junctions' => function (\yii\db\ActiveQuery $query) {
            $query->andWhere(['{{junction}}.id' => null]);
        }
    ], false);

【讨论】:

  • 就我而言,我不是创建与联结表的关系,而是有一个使用它的关系。所以,我有一个像你这样的查询,数据是空的(我认为原因是关系方法)。我更改 andWhere -> where 并使用默认的左连接。通过这种方式,查询是有效的。谢谢!
  • 清除所有以前的条件(例如行为)。
  • 正如您提到的,必须为此使用 LEFT JOIN。我的错。
  • 你说得对where,但在这种情况下,我不需要一级条件。在另一种情况下,andWhere 相当 where
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多