Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ActiveQuery到数组(asArray)_Php_Yii2 - Fatal编程技术网

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我猜她使用了正确的表名。