在 laravel 中将对象转换为数组
Converting object to array in laravel
我查询了一个这样的数据库,得到了一个数组:
foreach($oid as $orderid) {
$orderdetailData[] = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->where('order_details.oid', $orderid)->get();
}
$data = array_flatten($orderdetailData);
return $data;
这是我得到的数组
array (size=2)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
我正在尝试以
的形式获取此数组
array (size=2)
0 =>
array (size=2)
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=2)
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
我试过这样做:
foreach($orderdetailData as $key => $value){
$data[] = array_flatten($orderdetailData[$key]);
}
但是这样做会得到一个这种形式的数组:
array (size=2)
0 =>
array (size=1)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=1)
0 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
这不是我要找的。有人能告诉我这样做的简单方法是什么吗?谢谢
使用 array_map
并转换为数组就足够了:
$data = array_map(function($object){
return (array) $object;
}, $data);
我也不会 运行 在循环中查询。您应该尝试从数据库的一个查询中获取该数据。像这样的东西可以工作:
$data = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->whereIn('order_details.oid', $oid)->get();
编辑
正如另一个答案中提到的那样,让我解释一下如何通过将 PDO 设置为 FETCH_ASSOC
:
来实现相同的目的
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
但是,这会在全局范围内更改其余请求的获取模式(至少在您不打开新连接的情况下)。为了保存,您应该在之后将其改回:
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode(PDO::FETCH_CLASS);
如果您不确定使用的是什么默认值,甚至可以先备份它:
$fetchModeBefore = DB::getFetchMode();
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode($fetchModeBefore);
在 PDO/DB 对象上,您可以将 return 样式设置为 assoc。
我查询了一个这样的数据库,得到了一个数组:
foreach($oid as $orderid) {
$orderdetailData[] = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->where('order_details.oid', $orderid)->get();
}
$data = array_flatten($orderdetailData);
return $data;
这是我得到的数组
array (size=2)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
我正在尝试以
的形式获取此数组array (size=2)
0 =>
array (size=2)
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=2)
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
我试过这样做:
foreach($orderdetailData as $key => $value){
$data[] = array_flatten($orderdetailData[$key]);
}
但是这样做会得到一个这种形式的数组:
array (size=2)
0 =>
array (size=1)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=1)
0 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)
这不是我要找的。有人能告诉我这样做的简单方法是什么吗?谢谢
使用 array_map
并转换为数组就足够了:
$data = array_map(function($object){
return (array) $object;
}, $data);
我也不会 运行 在循环中查询。您应该尝试从数据库的一个查询中获取该数据。像这样的东西可以工作:
$data = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->whereIn('order_details.oid', $oid)->get();
编辑
正如另一个答案中提到的那样,让我解释一下如何通过将 PDO 设置为 FETCH_ASSOC
:
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
但是,这会在全局范围内更改其余请求的获取模式(至少在您不打开新连接的情况下)。为了保存,您应该在之后将其改回:
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode(PDO::FETCH_CLASS);
如果您不确定使用的是什么默认值,甚至可以先备份它:
$fetchModeBefore = DB::getFetchMode();
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode($fetchModeBefore);
在 PDO/DB 对象上,您可以将 return 样式设置为 assoc。