【问题标题】:Laravel 8 Get Column Names from Select QueryLaravel 8 从选择查询中获取列名
【发布时间】:2021-09-12 05:47:10
【问题描述】:

我想从选择查询示例中获取列名:

$data = RoomModel::from('rooms as a')
    ->where('a.id', 1)
    ->where('a.isdelete', 0)
    ->join('roomclass as b', 'a.roomclass_id', 'b.id')
    ->join('nursestation as c', 'a.nursestation_id', 'c.id')
    ->select('a.id as ID', 'a.description as Description', 'b.customdesc as Room Class', 'c.customdesc as Nurse Station', 'a.isactive as Status');

这会有结果

array('ID','Description','Room Class', 'Nurse Station', 'Status')

这可以通过使用 field_list 使用 code igniter 来实现:

$sql = "
    SELECT
    id as `ID`, 
    description as `Description`, 
    customdesc as `Nurse Station`,
    isactive as `Status`
    FROM mytable";

$query = $this->db->query($sql);
print_r($query->field_list());

我在 Laravel 中找不到。

提前致谢!!

【问题讨论】:

  • 您想要模型中列的别名吗?
  • 如果我猜对了你想检索归档名称。那么你可以查看这个链接stackoverflow.com/questions/37157270/…
  • @simpson 是的,我想获取字段名称,但不是从整个表列本身获取,我只想获取查询中所选列的字段名称。

标签: php mysql database laravel eloquent


【解决方案1】:
    $data = RoomModel::from('rooms as a')
                            ->where('a.id', 1)
                            ->where('a.isdelete', 0)
                            ->join('roomclass as b', 'a.roomclass_id', 'b.id')
                            ->join('nursestation as c', 'a.nursestation_id', 'c.id')
                            ->limit(1)->get('a.id as ID', 'a.description as Description', 'b.customdesc as Room Class', 'c.customdesc as Nurse Station', 'a.isactive as Status');

$attr = array_keys($data->getAttributes());

【讨论】:

  • 代码似乎也得到了结果而不是列名,我想要的是我选择的列的数组:array('ID','Description','Room Class','护士站','状态')
  • 感谢您的回答,但如果结果为空怎么办?那么这将不起作用......与 CI 中的 field_list() 不同,即使结果为空,它仍会给出列名
  • @eman_invok05 Laravel 有 Schema::getColumnListing('table_name');看到这个答案stackoverflow.com/questions/33512184/…
  • 它只是返回我选择的列还是表格的整个列?
【解决方案2】:

使用模型类创建新查询时,您将获得Illuminate\Database\Eloquent\Builder 的实例(或从它派生的类)。

要获取选择中使用的列,您需要从构建器中进行查询:

$data = RoomModel::from('rooms as a')
    ...
    ->select('a.id as ID', 'a.description as Description', 'b.customdesc as Room Class', 'c.customdesc as Nurse Station', 'a.isactive as Status');

$columns = $data->getQuery()->columns;

如果你没有使用 Eloquent,并且有一个 Illuminate\Database\Query\Builder 的实例,你可以在没有 getQuery() 调用的情况下获得 columns 属性:

$data = DB::table('rooms as a')
    ...
$columns = $data->columns;

这将导致$columns 被设置为数组:

[
  "a.id as ID",
  "a.description as Description",
  "b.customdesc as Room Class",
  "c.customdesc as Nurse Station",
  "a.isactive as Status",
]

很遗憾,即使您执行查询,别名也不会为您解析。

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多