gpt4 book ai didi

php - ActiveQuery 到数组 (asArray)

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:34 26 4
gpt4 key购买 nike

该查询有什么问题?

$numery = Number::find()
->select('number.phone_number')
->from('number')
->leftJoin('ordered_number', ['ordered_number.number_id' => 'number.phone_number'])
->where(['ordered_number.order_id' => 123])
->asArray();

我不确定 asArray 是否被正确使用,也不确定我是否必须以 one()all() 结束我的查询,因为所有示例我见过。

我把它改成:

        $numery = Number::find()
->select('number.phone_number')
->from('number, ordered_number')
->where(['ordered_number.number_id' => 'number.id'])
->andWhere(['ordered_number.order_id' => 123])
->asArray()
->all();

但我仍然得到 NULL 而不是 4 元素数组。当我删除“where”部分时,我得到了我所有的数字,所以我想那里某处有问题。在原始 MySQL 中工作并且我想使用的查询如下所示:

SELECT number.phone_number 
FROM number, ordered_number
WHERE ordered_number.number_id=number.id
AND ordered_number.order_id=123

最佳答案

关于第一个:

$numery = Number::find()
->select('number.phone_number')
->from('number')
->leftJoin('ordered_number', ['ordered_number.number_id' => 'number.phone_number'])
->where(['ordered_number.order_id' => 123])
->asArray();

您需要使用 one()all() 结束它,具体取决于您期望获得的结果数量。
one() 为您提供单个数据库行,all() 为您提供数据库行数组。
如果没有 asArray(),它会为您提供对象(如果是 all(),则为对象数组)- 使用 asArray(),它会为您提供数组(或数组的数组)显然。

还有一件事 - 当您使用 Model::find() 静态方法时,您不必设置 from() 因为它会自动使用底层数据库模型表。

更新:leftJoin 错误 - 应该是

->leftJoin('ordered_number', 'ordered_number.number_id = number.phone_number')

关于第二个:

$numery = Number::find()
->select('number.phone_number')
->from('number, ordered_number')
->where(['ordered_number.number_id' => 'number.id'])
->andWhere(['ordered_number.order_id' => 123])
->asArray()
->all();

您正在 from() 中添加两个表。这个方法声明在那种情况下你应该使用数组而不是字符串:

->from(['number', 'ordered_number'])

关于php - ActiveQuery 到数组 (asArray),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224678/

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