Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 使用联接表查询和返回JSON数据将把数组中的值转换为字符串_Php_Yii2 - Fatal编程技术网

Php 使用联接表查询和返回JSON数据将把数组中的值转换为字符串

Php 使用联接表查询和返回JSON数据将把数组中的值转换为字符串,php,yii2,Php,Yii2,我该怎么办?请帮忙,谢谢 数组中有塑料数据,但都是字符串 $query = ProductInfo::find() ->select(ProductInfo::tableName() . '.*,' . ProductStock::tableName() . '.product_uid,total_stock,useful_stock,freeze_stock,warehouse_uid ,' . Category::tableName() . '.category_nam

我该怎么办?请帮忙,谢谢 数组中有塑料数据,但都是字符串

$query = ProductInfo::find()
        ->select(ProductInfo::tableName() . '.*,' . ProductStock::tableName() . '.product_uid,total_stock,useful_stock,freeze_stock,warehouse_uid ,' . Category::tableName() . '.category_name,'.ProductBrand::tableName().'.name,'.Product::tableName().'.type')
        ->join('LEFT JOIN', ProductStock::tableName(), ProductInfo::tableName() . '.product_uid = ' . ProductStock::tableName() . '.product_uid')
        ->join('LEFT JOIN',Product::tableName(),ProductInfo::tableName().'.product_uid='.Product::tableName().'.uid')
        ->join('LEFT JOIN', Category::tableName(), ProductInfo::tableName() . '.category_uid =' . Category::tableName() . '.uid')
        ->join('LEFT JOIN', ProductBrand::tableName(), ProductInfo::tableName() . '.product_brand_uid =' . ProductBrand::tableName() . '.uid')
        ->Where([Product::tableName().'.type'=>0,ProductInfo::tableName().'.delete_flag' => 0])
        ->andFilterWhere(['or',
            ['like', 'product_name', $keyword],
            ['like', 'serial_number', $keyword],
        ])
        ->asArray()
        ->all();
没有错,但是我的数据已经转换成字符串,我需要根据数据的数据类型输出它

enter code here   {
"id": "2",
"uid": "1494645615632806007962",
"product_uid": "3213213213213213213211",
"product_name": "xxx2",
"product_brand_uid": "123456",
"brand_name": "wisss"………………},
就像id:“2”一样,它应该是“id”:2 当我删除asArray()时,显示的数据类型是正常的。 但只有一个数据表


我发现,只要表以JSON格式查询和返回数据,就会发生这种情况。

这是所需的行为

检索数组中的数据:

注意:虽然此方法(asArray)可以节省内存并提高性能,但是 靠近较低的DB抽象层,您将失去大部分 活动记录功能。一个非常重要的区别在于数据 列值的类型。当您在活动记录中返回数据时 实例中,列值将根据 实际列类型;另一方面,当您在 数组中,列值将是字符串(因为它们是 PDO(不进行任何处理),而不考虑其实际列类型

我认为您可以使用以下内容:

$query = ProductInfo::find()
        ->select(ProductInfo::tableName() . '.*,' . ProductStock::tableName() . '.product_uid,total_stock,useful_stock,freeze_stock,warehouse_uid ,' . Category::tableName() . '.category_name,'.ProductBrand::tableName().'.name,'.Product::tableName().'.type')
        ->join('LEFT JOIN', ProductStock::tableName(), ProductInfo::tableName() . '.product_uid = ' . ProductStock::tableName() . '.product_uid')
        ->join('LEFT JOIN',Product::tableName(),ProductInfo::tableName().'.product_uid='.Product::tableName().'.uid')
        ->join('LEFT JOIN', Category::tableName(), ProductInfo::tableName() . '.category_uid =' . Category::tableName() . '.uid')
        ->join('LEFT JOIN', ProductBrand::tableName(), ProductInfo::tableName() . '.product_brand_uid =' . ProductBrand::tableName() . '.uid')
        ->Where([Product::tableName().'.type'=>0,ProductInfo::tableName().'.delete_flag' => 0])
        ->andFilterWhere(['or',
            ['like', 'product_name', $keyword],
            ['like', 'serial_number', $keyword],
        ]);

$productsAsArray = ArrayHelper::toArray($query->all());

让我知道它是否有效。有关更多详细信息,您可以参考此和此。

能否提供一些您认为是问题所在的代码?或者正在显示的错误或任何其他有用信息。我已经向您展示了它。当我不使用asArray()时,这是正常的,但我没有其他表的查询信息。我发现,只要表以JSON格式查询并返回数据,就会发生这种情况。这可能会有所帮助:非常感谢。这个问题已经用您自己的方式解决了,但是我的其他列表数据并不仅仅显示信息表