fetchall在laravel中返回stdClass对象

问题描述 投票:0回答:3

我正在对Laravel中的db2 ibm数据库执行查询。

call STOREDPROC.GET('leaders', '{"params": ""}', 'lead_management', 'FR');

问题是fetchAll()返回一个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请求发送数据,不幸的是,在请求的另一端收到的数据作为流返回。

因此,如何使fetchAll返回数组而不是stdObject类?

我试图像这样在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;
}
php laravel db2 odbc
3个回答
0
投票

我遇到了同样的问题。不幸的是,此PDO设置深入框架的内核中,无法更改。为了摆脱这种情况,我不得不编写不太好的代码:

foreach ($result as $key => $item) {
    $result[$key] = (array) $item;
}

0
投票

您可以这样做:

$result = json_encode($result);
$result = json_decode($result, true);

0
投票

似乎问题在于特殊字符的编码会导致语法错误,从而导致格式无效的json。通过转换为utf8编码,然后转换为json_decode而不是encoding,我可以使其工作。

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;
© www.soinside.com 2019 - 2024. All rights reserved.