gpt4 book ai didi

php - Yii2 ActiveQuery 在链接数组中使用 OR

转载 作者:可可西里 更新时间:2023-11-01 07:08:09 24 4
gpt4 key购买 nike

我想在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com