如何通过Laravel DB facade获取仅含数据库名的简单数组?
嘿,这问题我熟,帮你拆解一下~
怎么获取仅含数据库名的简单数组
有两种常用方法,看你习惯哪种:
- 用
array_column处理现有结果
直接对DB::select返回的结果数组做提取,array_column能帮你把指定键(这里是schema_name)的值抽出来,变成纯值数组:
$databases = array_column(DB::select("SELECT `schema_name` FROM information_schema.schemata"), 'schema_name'); dd($databases); // 输出:array:1 [ 0 => "database_name" ]
- 用Laravel查询构造器的
pluck方法
这是更贴合Laravel风格的写法,pluck会直接返回指定列的集合,转成数组就能得到你想要的结果:
$databases = DB::table('information_schema.schemata') ->pluck('schema_name') ->toArray(); dd($databases); // 同样得到纯值数组
为什么当前返回的不是简单数组?
这得聊聊DB::select()的工作逻辑:
当你用DB::select()执行原生SQL时,它返回的是一个**stdClass对象的数组**,每个对象对应查询结果里的一行数据,对象的属性就是你查询的列名,值是对应列的内容。
这么设计是为了适配多列查询的场景——比如你查SELECT schema_name, default_collation_name FROM ...时,能直接通过$row->schema_name、$row->default_collation_name访问对应值,可读性和易用性都很高。但如果你只需要单个列的纯值,就需要额外一步提取操作啦。
内容的提问来源于stack exchange,提问作者lewis4u
相关产品推荐
相关产品推荐

