我有如下表。
CREATE TABLE A (
id INT,
relationId INT,
status INT
)
CREATE TABLE B (
id INT,
status INT
)
类文件如下
class A extends \yii\db\ActiveRecord {
public function getB() {
return $this->hasOne(B::class, ['id' => 'relationId']);
}
public function find() {
return new AQuery(__CLASS__);
}
}
class AQuery extends \yii\db\Query {
public function isActive() {
return $this->andWhere(['status' => 1]);
}
public function isNotActive() {
return $this->andWhere(['status' => 0]);
}
}
class B extends \yii\db\ActiveRecord {
public function find() {
return new BQuery(__CLASS__);
}
}
class BQuery extends \yii\db\Query {
public function isActive() {
return $this->andWhere(['status' => 1]);
}
public function isNotActive() {
return $this->andWhere(['status' => 0]);
}
}
我正在做这样的事情
$model = A::find()
->joinWith([
'b' => function(BQuery $query) {
$query->isNotActive();
}
])
->isActive()
->one();
这会产生错误
Column 'status' in where clause is ambiguous"
我知道的唯一方法是手动向 $query->from
添加别名并重写 $query->andWhere
。但是有没有更简单的方法来重用查询简写?
最佳答案
使用ActiveRecord::tableName()
而不是别名(这似乎不是 Yii2 中的事件记录功能)。 tableName()
可以通过 modelClass
访问\yii\db\ActiveQuery
的属性。
public function isActive() {
$modelClass = $this->modelClass;
return $this->andWhere([$modelClass::tableName().'.status' => 1]);
}
关于php - 在 Yii2 中重用查询简写时如何避免字段不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839188/