【问题标题】:laravel pagination : Call to a member function render() on arraylaravel 分页:调用数组上的成员函数 render()
【发布时间】:2016-02-13 13:53:37
【问题描述】:

在 laravel 控制器中,我有以下代码:

public function getAdmins(){
    //$users = $this->user->all();

    $search[] =array();
    $search['name']= Input::get('name','');
    $search['uname']= Input::get('uname','');
    $search['role']= Input::get('role','');

    $users = $this->user->findUsers($search);

    $exceptSuperadmin = array();
    foreach($users as $user){
        if(!$user->isUser())
            $staffs[] = $user;
    }
    $users = @$staffs;

    return view('users::admins.list')->with('staffs',$users)->with('search',$search);
}

在模型中我有:

public function findUsers($search)
{

    return self::where('name','like','%'.$search['name'].'%')
    ->where('username','like','%'.$search['uname'].'%')
    ->where('role','like','%'.$search['role'].'%')
    ->paginate(5);

}

在刀片文件中我有:

@if($staffs)

@foreach($staffs as $staff)
        <!-- Some code here to loop array -->
     @endforeach

@else
      No Staffs

@endif 

{!! $staffs-&gt;render() !!} Error comes at this line

我不明白为什么会出现此错误....staffs 是一个数组,而 render() 是一个回显分页页面的函数...但无法收到错误...任何人都可以帮忙。

【问题讨论】:

  • 渲染函数在数组上不可用。它仅在集合中可用。对结果进行分页后,您将它们添加到数组中。这就是您收到该错误的原因。
  • 不,render() 适用于 PaginationAware 对象,而不适用于您使用它创建的数组
  • 那么解决方案是什么...在正常情况下,我们按照我上面所做的那样进行分页... laravel 文档也像我上面所做的那样说明了这种方式..但是错误来了
  • @Damien Pirsy....然后你的意思是说我必须创建一个对象..而不是一个数组?
  • 你们的意思是说 render() 函数适用于对象,而不是数组......我说的对吗?

标签: php laravel pagination


【解决方案1】:

通过对 pager 对象应用 foreach 并分配一个数组,您将失去分页属性,因此您将拥有一个数组而不是 pager 对象。 我为您的情况推荐以下解决方案:

控制器:

public function getAdmins(){

    $search[] =array();
    $search['name']= Input::get('name','');
    $search['uname']= Input::get('uname','');
    $search['role']= Input::get('role','');

    $users = $this->user->findUsers($search);

    return view('users::admins.list')->with('users',$users)->with('search',$search);
}

刀片文件:

@if($users)

    @foreach($users as $user)
         @if(!$user->isUser())
            <!-- Some code here to loop array -->
         @endif
    @endforeach

@else
      No Staffs

@endif 
{!! $users->render() !!}

【讨论】:

  • @Jeans Marcos:好吧,让我来做吧
  • @Jeans Marcos:能给我你的skype ID吗?
  • 我也遇到了同样的问题。出现错误,例如“调用数组上的成员函数 links()”。我不能使用集合,需要使用数组。请问有什么解决办法?
【解决方案2】:

不,render() 不适用于对象本身,也不适用于您使用分页工作所需的对象创建的数组 (LengthAwarePaginator)

由于您有一个集合,并且您需要一个,您可以使用提供的方法之一进行过滤,例如 filter

类似的东西(未经测试但应该可以):

$staff = $users->filter(function ($value, $key) {
    return !$value->isUser();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2017-05-22
    • 2018-06-28
    • 2019-01-22
    • 2019-01-18
    • 2021-06-15
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多