在Laravel 5.5中为foreach()提供的参数无效

时间:2018-02-15 07:17:20

标签: php laravel

我正在尝试从我的数据库中检索记录,但我总是在@foreach中得到一个无效的参数错误。我的语法看起来正确,我找不到问题所在。请帮助。

role.blade.php

  <div class="box-body">
    <table id="example1" class="table table-bordered table-striped">
      <thead>
      <tr>
        <!-- <th></th> -->
        <th>Name</th>
        <th>Company ID</th>
        <th>Role Type</th>
      </tr>
      </thead>
      <tbody>
      @foreach ($data as $datas)
      <tr>
        <td>{{ $datas->id }}</td>
        <td>{{ $datas->company_name }}</td>
        <td>{{ $datas->role_type }}</td>
      </tr>
      @endforeach
      </tbody>
    </table>
  </div>
</div>

Controller.php这样

public function roles(){
        $data = DB::select('select * from roles');
        return view('admin.roles', ['data'=>'$data']);
    }

routes.php文件

Route::get('/roles', 'mainController@roles');

3 个答案:

答案 0 :(得分:5)

你正在尝试迭代字符串,所以改变这个:

'data'=>'$data'

要:

'data' => $data

答案 1 :(得分:1)

您必须使用get()方法从数据库中获取数据。从视图函数$data中删除单引号,使用单引号传递数据将视为字符串而不是数组。

public function roles(){
    $data = DB::select('select * from roles')->get();
    return view('admin.roles', ['data'=>$data]);
}

答案 2 :(得分:0)

这会产生错误,因为$data将为空。

所以你需要检查变量是否设置而不是空。

在您的刀片模板文件中,您需要输入if语句,如下所示:

.....
</tr>
      </thead>
      <tbody>
      @if (isset($data) && !empty($data))

        @foreach ($data as $datas)
        <tr>
          <td>{{ $datas->id }}</td>
          <td>{{ $datas->company_name }}</td>
          <td>{{ $datas->role_type }}</td>
        </tr>
        @endforeach

      @endif  
      </tbody>
.....

More about blade templates control structures