作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在 ActiceRecord 扩展的类中的 hasMany
函数中的 $link
数组中使用 OR 运算符。例如,我想获取与用户帐户相关的交易。在 sql 中,它类似于 SELECT * FROM transactions WHERE fromAccountId = :id OR toAccountId = :id
但我如何使用 Yii2 编写此代码
public function getTransactions() {
return $this->hasMany(Transaction::className(), [
'fromAccountId' => 'id',
'toAccountId' => 'id'
]);
}
最佳答案
Link ActiveQuery 使用数组的键作为名称列,值 - 作为列的值。
The array keys must be columns of the table for this relation, and the array values must be the corresponding columns from the primary table
因为代码不起作用(where (fromAccountId, toAccountId) IN ('id','id')
):
[
'fromAccountId' => 'id',
'toAccountId' => 'id'
]
您可以在 getTransactions() 中重写 hasMany 行为
public function getTransactions() {
$query = Transaction::find();
$query->multiple = true;
return $query->where(['OR',
['fromAccountId' => $this->id],
['toAccountId' => $this->id]
]);
}
它支持 native 行为,正如预期的那样:
$model->getTransactions() // return as \yii\db\ActiveQuery
$model->transactions // return as array of Transactions models
但不适用于$model->find()->with('transactions')
,因为with
需要设置$查询->链接
。而 with
需要使用 join....
关于php - Yii2 ActiveQuery 在链接数组中使用 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365150/
我是一名优秀的程序员,十分优秀!