Php ActiveQuery到数组(asArray)
这个问题怎么了Php ActiveQuery到数组(asArray),php,yii2,Php,Yii2,这个问题怎么了 $numery = Number::find() ->select('number.phone_number') ->from('number') ->leftJoin('ordered_number', ['ordered_number.number_id' => 'number.phone_number']) ->where(['ordered_number.order_id' =&
$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
最终持有由find()
方法创建并由后面的其他方法修改的ActiveQuery
对象
最后需要使用one()
或all()
方法,以便执行查询并返回查询结果
asArray()
方法只告诉ActiveQuery
对象将其结果作为数组而不是对象或对象数组返回。关于第一个对象:
$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();
$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();
您需要以one()
或all()
结束它,具体取决于您希望得到的结果数量。one()
提供单个DB行,all()
提供DB行数组。如果没有
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')
->leftJoin('ordered_number', ['ordered_number.number_id' => 'number.phone_number'])
->where(['ordered_number.order_id' => 123])
->asArray();
$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'])
你期待什么?事实上会发生什么?确切的问题是什么?它以null结尾,甚至认为应该是3或4条记录匹配。我想我没有真正理解find()methodnull的语法,这意味着没有找到满足查询的记录。尝试使用
->getRawSql()
而不是->all()
来获取简单的SQL查询并检查is是否与您的期望相匹配。因此,我将其更改为:$numery=Number::find()->select('Number.phone_Number')->from('Number,ordered_Number')->其中(['ordered\u number.number\id'=>'number.id'])->和where(['ordered\u number.order\id'=>123])->asArray()->all();但我的结果仍然是NULL,而不是4元素数组。我有:$numery=number::find()->select('number.phone\u number'))->leftJoin('ordered_number',['ordered_number.number_id'=>'number.id'])->其中(['ordered_number.order_id'=>123])->asArray()->all()
并且仍然为空。根据您的建议,没有任何更改,或者我做错了什么吗?这取决于当ordered\u number.order\u id=123
是时,数据库中是否有任何内容应该返回。应该显示4条记录。当我使用问题末尾添加的sql查询时,所有内容都会显示出来这很顺利,但当我试着用Yii做这件事时失败了。@Bizley:我怀疑他使用的别名number
,这是正确的方法吗?@NitinP我猜她使用了正确的表名。