我工作的一個項目,我有一個擴展\yii\db\ActiveRecord
我自己的ActiveRecord類:Yii2 ActiveRecord的 - 默認情況下會導致SQL錯誤
class ActiveRecord extends \yii\db\ActiveRecord
{
const DELETED_STATUS = 1;
/**
* Defines the soft delete field
*/
public static function softDeleteField()
{
return 'Deleted';
}
/**
* Overrides the find() function to add sensitivity to deletes
*/
public static function find()
{
return parent::find()->where(['not',[
static::softDeleteField() => static::DELETED_STATUS
]]);
}
}
我希望能夠讓一切軟可刪除。根據documentation,應用這樣的默認條件應該是可行的。
這對大部分工作很好,但是當我嘗試進行連接時,我得到一個sql錯誤。這方面的一個例子是:
$query = Model::find(); // ActiveRecord of table1
$query->joinWith(['alias' => function($query) { $query->from(['alias' => 'table2']); }]);
而我得到的錯誤:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'Deleted' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `table1` LEFT JOIN `table2` `alias` ON `table1`.`StatusID` = `alias`.`StatusID` WHERE (NOT (`Deleted`=1)) AND (NOT (`Deleted`=1))
我爲能夠得到這個改變我的連接查詢攜手
// Omitting the alias in the from() method
$query->joinWith(['alias' => function($query) { $query->from('table2'); }]);
和將我的find()
方法更改爲
public static function find()
{
return parent::find()->where(['not',[
static::tableName()."."static::softDeleteField() => static::DELETED_STATUS
]]);
}
但是這隻會在沒有別名的情況下起作用。有什麼我可以做的,以使這個工作的別名連接查詢以及?
我能做到這一點,但偶爾也會指示東西是否被刪除的字段是在擴展我的'ActiveRecord'類的類不同,所以我需要使用晚期靜態綁定。 – spencer4of6