Laravel,如何获得选择,数据库字段
Laravel, how to get selected, db fields
有一个模型,来自控制器,我需要访问这个模型数据库字段。
控制器中的代码:
$crud -> get() -> getAttributes();
//$crud->attributesToArray()
print_r($crud);
我能够获得整个 table 字段,但我只需要选中的字段。需要动态显示 table 仅包含选定的字段,可以在 运行 时间内更改。
我不确定 'selected' 数据库字段是什么意思。如果这是来自表单的列名列表,您可以简单地将其传递给 get()
方法:
$crud->get([
'id',
'name',
'created_at',
]);
如果您想要可用列的列表,则无法从模型本身获取(它不知道存在哪些列)。相反,您可以使用:
$table = (new Crud)->getTable();
$columns = DB::getSchemaBuilder()->getColumnListing($table);
您可以使用两种方法,get() 或 all()
$crud -> get(['column1', 'column2'])
$crud -> all(['column1', 'column2'])
假设您有一个查询:
$query = Crud::select('id as Id', 'name as Name', 'something')
->selectRaw('CONCAT(id, "-", name) as Serial')
->get();
不知道什么查询,得到一个table看起来像这样
Id
Name
something
Serial
1
A
lorem
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>
有一个模型,来自控制器,我需要访问这个模型数据库字段。
控制器中的代码:
$crud -> get() -> getAttributes();
//$crud->attributesToArray()
print_r($crud);
我能够获得整个 table 字段,但我只需要选中的字段。需要动态显示 table 仅包含选定的字段,可以在 运行 时间内更改。
我不确定 'selected' 数据库字段是什么意思。如果这是来自表单的列名列表,您可以简单地将其传递给 get()
方法:
$crud->get([
'id',
'name',
'created_at',
]);
如果您想要可用列的列表,则无法从模型本身获取(它不知道存在哪些列)。相反,您可以使用:
$table = (new Crud)->getTable();
$columns = DB::getSchemaBuilder()->getColumnListing($table);
您可以使用两种方法,get() 或 all()
$crud -> get(['column1', 'column2'])
$crud -> all(['column1', 'column2'])
假设您有一个查询:
$query = Crud::select('id as Id', 'name as Name', 'something')
->selectRaw('CONCAT(id, "-", name) as Serial')
->get();
不知道什么查询,得到一个table看起来像这样
Id | Name | something | Serial |
---|---|---|---|
1 | A | lorem | 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>