首页 > 解决方案 > Laravel,如何被选中,数据库字段

问题描述

有一个模型,来自控制器,我需要访问这个模型数据库字段。

控制器中的代码:

$crud -> get() -> getAttributes();
//$crud->attributesToArray()
print_r($crud);

我能够获得整个表格字段,但我只需要选中的字段。只需要动态显示带有选定字段的表,它可以在运行时更改。

标签: laravelselectorm

解决方案


假设您有一个查询:

$query = Crud::select('id as Id', 'name as Name', 'something')
             ->selectRaw('CONCAT(id, "-", name) as Serial')
             ->get();

在不知道查询是什么的情况下,得到一个看起来像这样的表

ID 姓名 某物 串行
1 一个 洛雷姆 1-A
.. …… ………… ……

您需要使用Builder实例(在调用之前->get()

$query = Crud::select('id as Id', 'name as Name', 'something')
             ->selectRaw('CONCAT(id, "-", name) as Serial');

$results = $query->get();
dump($query->getQuery()->columns);
/*
[
    'id as Id',
    'name as Name',
    'something',
    Illuminate\Database\Query\Expression
]
*/
dump(array_map(function ($column) {
    return $column instanceof Illuminate\Database\Query\Expression
        ? Str::afterLast($column->getValue(), 'as ')
        : Str::afterLast($column, 'as ');
}, $query->getQuery()->columns));
/*
[
    'Id',
    'Name',
    'something',
    'Serial'
]
*/

所以你可以看到。

$query = Crud::select('id as Id', 'name as Name', 'something')
             ->selectRaw('CONCAT(id, "-", name) as Serial')
             ->get();

$columns = array_map(function ($column) {
    return $column instanceof Illuminate\Database\Query\Expression
        ? Str::afterLast($column->getValue(), 'as ')
        : Str::afterLast($column, 'as ');
}, $query->getQuery()->columns);

$results = $query->get();

return view('view', compact('columns', 'results'));

然后在你看来

<table>
  <thead>
    <tr>
      @foreach ($columns as $column)
        <th>{{ $column }}</th>
      @endforeach
    </tr>
  </thead>
  <tbody>
    @foreach ($results as $result)
      <tr>
        @foreach ($columns as $column)
          <td>{{ $result->{$column} }}</td>
        @endforeach
      </tr>
    @endforeach
  </tbody>
</table>

推荐阅读