该查询有什么问题?
$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
答案 0 :(得分:1)
关于第一个:
$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()
中添加了两个表格。此方法指出,在这种情况下,yu应该使用数组而不是字符串:
->from(['number', 'ordered_number'])
答案 1 :(得分:0)
在您的代码中$numery
最终持有ActiveQuery
方法创建的find()
对象,并在其后的其他方法中进行修改。
您需要在最后使用one()
或all()
方法,以便执行查询并返回查询结果。
asArray()
方法只是告诉ActiveQuery
对象将其结果作为数组而不是对象或对象数组返回。