fetchall returns laravel 中的 stdClass 对象
fetchall returns stdClass object in laravel
我正在对 Laravel 中的 db2 ibm 数据库执行查询。
call STOREDPROC.GET('leaders', '{"params": ""}', 'lead_management', 'FR');
问题是 fetchAll() return 是一个 stdClass 对象数组。
Array (
[0] => stdClass Object (
[noref] => 368
[nofab] => FORT
[actionname] => FORT BP720
[longactionname] => Epargne fort
[startat] => 1999-10-29
[endat] => 1999-10-29
[monthduration] => 0
[kam] => CTER
[cls] => SDO
[status] => O
[deletebyte] =>
)
)
这很好,但我宁愿得到一个数组。我必须通过 http 请求发送数据,不幸的是,在请求的另一端接收到的数据 returns 作为流。
那么如何使 fetchAll return 成为数组而不是 stdObject class?
我试过在 laravel 中编辑 database.php 文件中的选项:
'options' => [
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
],
但它仍然给我完全相同的结果。
这是我在 laravel:
中获取数据的代码
private function execute($verb, $args): array
{
$query = $this->buildQueryString($verb, $args);
$this->buildConnection();
$result = DB::connection('odbc')->select($query);
return $result;
}
我遇到了同样的问题。不幸的是,这个 PDO 设置在框架的内核深处,无法更改。我不得不编写不太好的代码来摆脱这种情况:
foreach ($result as $key => $item) {
$result[$key] = (array) $item;
}
你可以这样做:
$result = json_encode($result);
$result = json_decode($result, true);
问题似乎是特殊字符的编码导致语法错误,因此格式无效 json。我已经通过转换为 utf8 编码然后使用 json_decode 而不是编码来使其工作。
public static function convert_from_latin1_to_utf8_recursively($result)
{
if (is_string($result)) {
return utf8_encode($result);
} elseif (is_array($result)) {
$ret = [];
foreach ($result as $i => $d) $ret[ $i ] = self::convert_from_latin1_to_utf8_recursively($d);
return $ret;
} elseif (is_object($result)) {
foreach ($result as $i => $d) $result->$i = self::convert_from_latin1_to_utf8_recursively($d);
return $result;
} else {
return $result;
}
}
然后在我的回复中:
$response = json_decode($response, true);
return $response;
我正在对 Laravel 中的 db2 ibm 数据库执行查询。
call STOREDPROC.GET('leaders', '{"params": ""}', 'lead_management', 'FR');
问题是 fetchAll() return 是一个 stdClass 对象数组。
Array (
[0] => stdClass Object (
[noref] => 368
[nofab] => FORT
[actionname] => FORT BP720
[longactionname] => Epargne fort
[startat] => 1999-10-29
[endat] => 1999-10-29
[monthduration] => 0
[kam] => CTER
[cls] => SDO
[status] => O
[deletebyte] =>
)
)
这很好,但我宁愿得到一个数组。我必须通过 http 请求发送数据,不幸的是,在请求的另一端接收到的数据 returns 作为流。
那么如何使 fetchAll return 成为数组而不是 stdObject class?
我试过在 laravel 中编辑 database.php 文件中的选项:
'options' => [
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
],
但它仍然给我完全相同的结果。
这是我在 laravel:
中获取数据的代码private function execute($verb, $args): array
{
$query = $this->buildQueryString($verb, $args);
$this->buildConnection();
$result = DB::connection('odbc')->select($query);
return $result;
}
我遇到了同样的问题。不幸的是,这个 PDO 设置在框架的内核深处,无法更改。我不得不编写不太好的代码来摆脱这种情况:
foreach ($result as $key => $item) {
$result[$key] = (array) $item;
}
你可以这样做:
$result = json_encode($result);
$result = json_decode($result, true);
问题似乎是特殊字符的编码导致语法错误,因此格式无效 json。我已经通过转换为 utf8 编码然后使用 json_decode 而不是编码来使其工作。
public static function convert_from_latin1_to_utf8_recursively($result)
{
if (is_string($result)) {
return utf8_encode($result);
} elseif (is_array($result)) {
$ret = [];
foreach ($result as $i => $d) $ret[ $i ] = self::convert_from_latin1_to_utf8_recursively($d);
return $ret;
} elseif (is_object($result)) {
foreach ($result as $i => $d) $result->$i = self::convert_from_latin1_to_utf8_recursively($d);
return $result;
} else {
return $result;
}
}
然后在我的回复中:
$response = json_decode($response, true);
return $response;