Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 仅返回Laravel中的值(无键/关联数组) 处境_Php_Arrays_Laravel_Eloquent_Query Builder - Fatal编程技术网

Php 仅返回Laravel中的值(无键/关联数组) 处境

Php 仅返回Laravel中的值(无键/关联数组) 处境,php,arrays,laravel,eloquent,query-builder,Php,Arrays,Laravel,Eloquent,Query Builder,我有以下代码以数组形式获取所有数据: Data::select('id', 'text')->get()->toArray(); 这将以以下格式返回数据: array:1 [ 0 => array:2 [ "id" => "1" "text" => "Stack" ] 1 => array:2 [ "id" => "2" "text" => "Overflow" ] ] 但我只希望将值作为常规数组

我有以下代码以数组形式获取所有数据:

Data::select('id', 'text')->get()->toArray();
这将以以下格式返回数据:

array:1 [
  0 => array:2 [
    "id" => "1"
    "text" => "Stack"
  ]
  1 => array:2 [
    "id" => "2"
    "text" => "Overflow"
  ]
]
但我只希望将值作为常规数组(无键/关联数组),因此在将数组转换为JSON时不会将其转换为对象:

array:1 [
  0 => array:2 [
    0 => "1"
    1 => "Stack"
  ]
  1 => array:2 [
    0 => "2"
    1 => "Overflow"
  ]
]
不充分的解决办法 我知道我可以通过循环和使用来转换它,但是前者不是一个单行程序,而第二个只适用于一个级别,而不适用于数组的数组

此外,我正在寻找一种“配置”雄辩/查询生成器的方法,而不是转换一次返回结果的方法

问题 有没有一种设置或方法可以通过Elount/Query Builder来实现这一点;博士 只需告诉PDO以这种方式工作:

DB::connection()->setFetchMode(PDO::FETCH_NUM);
Data::select('id', 'text')->get()->toArray();
DB::connection()->setFetchMode(PDO::FETCH_OBJ;);
不要忘记设置默认值或之前的设置。此外,您还需要使用这些正面:

use DB;
use PDO;
细节(幕后) 这是通过底层PDO本身进行控制的,而PDO本身可以通过以下方式进行控制:。我们需要的常数是:

FETCH_NUM:返回一个数组,该数组由结果集中返回的列编号索引,从列0开始

现在我们只需要以一种很快的方式通过它。该常量在函数的最后一行中的
select()
文件的
illumb/Database/Connection.php
中通过getter传递给PDO:

public function select($query, $bindings = [], $useReadPdo = true)
{
    return $this->run($query, $bindings, function ($me, $query, $bindings) use ($useReadPdo) {
        if ($me->pretending()) {
            return [];
        }

        // For select statements, we'll simply execute the query and return an array
        // of the database result set. Each element in the array will be a single
        // row from the database table, and will either be an array or objects.
        $statement = $this->getPdoForSelect($useReadPdo)->prepare($query);

        $statement->execute($me->prepareBindings($bindings));

        return $statement->fetchAll($me->getFetchMode());
    });
}
当然还有一个公共setter:
setFetchMode()
,所以我们只需要接收连接器,就可以设置它了。根据报告:

使用多个连接时,您可以通过
DB
facade上的
connection
方法访问每个连接

因此,我们有一切可以做到这一点:

DB::connection()->setFetchMode(PDO::FETCH_NUM);
在laravel 5.4之后不再是选项 可能的解决方法如下所示:

您可以在配置中添加带有默认值的.env变量

config/database.php:

fetch_mode => env('DB_FETCHMODE', 'FETCH_OBJ');
.env:

然后在/Database/Connection.php>中准备

添加以下内容:

$statement->setFetchMode($config['fetch_mode'] == "FETCH_OBJ" ? 5 : ($config['fetch_mode'] == "FETCH_NUM" ? 3 : 2));
插入:

$this->fetchMode
然后,您可以使用以下内容覆盖配置:

config()->set('database.connections.mysql.fetch_mode', 'FETCH_NUM');
这使fetch模式保持全局默认的fetch_OBJ,但您仍然可以随时切换到fetch_NUM

config()->set('database.connections.mysql.fetch_mode', 'FETCH_NUM');