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格式查询并返回数据,就会发生这种情况。这可能会有所帮助:非常感谢。这个问题已经用您自己的方式解决了,但是我的其他列表数据并不仅仅显示信息表