【问题标题】:Yii 2 can rewrite WHERE condition from model?Yii 2 可以从模型中重写 WHERE 条件吗?
【发布时间】:2018-07-28 11:30:26
【问题描述】:

我的模型中有一些 where 条件。 它的检查是现场激活或否。

现在我需要编写一个连接关系。但我需要删除 where 条件。有可能吗?

我的模型。

  ...
  public static function find() {
     return (new AssetgroupsQuery(get_called_class()))->active();
  }

我的关系

public function getAssetgroup(): \app\models\AssetgroupsQuery {
    return $this->hasOne(Assetgroups::class, ['asg_id' => 'ass_group'])->andOnCondition(['asg_active' => '1'])
        ->viaTable('assets', ['ass_id' => 'log_ass_id',]);
}

我需要获取所有活动资产并加入,如果资产为空我需要获取空字段,但是 将条件添加到我当前的 sql 查询并删除所有资产为空的字段的模型。 我尝试添加一些 where 条件来删除旧的 where,但它不起作用。

你能帮帮我吗?

【问题讨论】:

  • 不清楚你要做什么,你能告诉我们你调用上述关系的代码吗?

标签: sql yii yii2 yii2-basic-app


【解决方案1】:

您可以使用where(null) 重置现有条件。

在关系层面:

public function getAssetgroup(): \app\models\AssetgroupsQuery {
    return $this->hasOne(Assetgroups::class, ['asg_id' => 'ass_group'])
        ->andOnCondition(['asg_active' => '1'])
        ->where(null)
        ->viaTable('assets', ['ass_id' => 'log_ass_id',]);
}

或者直接加入:

$query = MyModel::find()
    ->joinWith([
        'assetgroup' => function (ActiveQuery $query) {
            $query->where(null);
        },
    ])

【讨论】:

  • 我使用 -> where([]) ,但我不确定它是否正确。使用 null 是更好的方法?模型或控制器中的更好方法是什么?
  • 空数组也可以工作,但null 明确表示“无条件”,所以我建议在我的示例中使用它。
猜你喜欢
  • 2011-05-07
  • 2014-09-08
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2019-11-15
  • 1970-01-01
  • 2022-10-06
相关资源
最近更新 更多