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');