我在动态创建表时遇到问题。
基本上我是通过以下语句从数据库中获取数据:
$data = User::all();
之后,我通过以下语句获取了数据库表的属性名称:
$columns = DB::getSchemaBuilder()->getColumnListing('users');
之后 $data 和 $columns
通过以下语句发送到 View :
return view('framework/list', compact('data', 'columns'));
在我看来,即 list.blade.php 两个 foreach 循环用于创建 <tr>
和 <td>
就像这样:
@foreach($data as $singleUser)
<tr>
@foreach($columns as $cols)
<td>
{{$singleUser->$cols}}
{{Blade::compileString('"'.'$singleUser->'."$cols".'"')}}
</td>
@endforeach
</tr>
@endforeach
但我得到一个异常,而不是打印值(两个语句用于打印值但它们都给出相同的异常)
(3/3) ErrorException
Trying to get property of non-object (View: /home/srmd/biniHR/resources/views/layouts/key.blade.php) (View: /home/srmd/resources/views/layouts/key.blade.php)
最佳答案
对于动态调用,您必须使用:{{$singleUser->{$cols}}}
This "enclose with braces" trick is useful in PHP whenever there is ambiguity due to variable variables.
How do I dynamically write a PHP object property name?
您可以将用户对象转换为数组并对其进行迭代,而不是获取数据库值:
@foreach($data as $singleUser)
<tr>
@foreach($singleUser->toArray() as $key => $value)
<td>
Key {{ $key }}
Value {{ $value }}
Value {{ $singleUser->toArray()[$key] }} //equal to first try
Value {{ $singleUser->{$key} }} // not sure if it works, but it should
</td>
@endforeach
</tr>
@endforeach
关于php - 在 laravel blade 中创建一个动态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45914841/