我有下面这样的桌子。
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"
我知道的唯一方法是手动将alias添加到
$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/