【问题标题】:Laravel 5 pagination Call to a member function render() on a non-objectLaravel 5分页调用非对象上的成员函数render()
【发布时间】:2016-01-25 13:52:39
【问题描述】:

我正在尝试对某些类别进行分页,但不知从何处弹出此错误,我不知道如何解决:

在非对象上调用成员函数 render()

这是我的控制器:

public function getFilmeByCateg()
{
    $categorii = Categorii::all();
    //$Movies = Movies::all();
    $categorie = Request::segment(2);
    $cat = Categorii::where('denumire', '=',$categorie)->first();
    $cat2 = Categorii_filme::where('categorie_id', '=' ,$cat->categorie_id)->get();

$filme = array();

foreach($cat2 as $filmulet)
{

$film = Movies::where('movie_id','=',$filmulet->film_id)->paginate(12)->first();
$filme[] = $film;


}

 return view('filme')->with('Movies',$filme)->with('categorii',$categorii);
}

这就是我在布局中呈现分页器的方式:

{!!$Movies->render() !!}

这是我的路线:

Route::get('categorie/{categorie}','WelcomeController@getFilmeByCateg');

这是在我的 Movies.php 中:

class Movies extends Model {

protected $table = "movies";
}

谁能告诉我如何才能做到这一点?

【问题讨论】:

  • 你的代码真是一团糟。你能告诉我们你对这个方法的路由声明吗?为什么你有 Category_filme Class ?这个类是否代表您的电影和类别之间的数据透视表?
  • 是的,在 categorii_filme 我有类别 ID 和电影 ID
  • 我猜你是 Laravel 的新手。我只能建议你仔细阅读 laravel Eloquent 文档。

标签: pagination laravel-5


【解决方案1】:

由于$filme是一个数组,你可以访问render()方法,你想要的对象是$Movies,它是一个数组。

foreach($cat2 as $filmulet)
{

    $film = Movies::where('movie_id','=',$filmulet->film_id)->paginate(12)->first();
    $filme[] = $film;
}

这里$filme是一个数组。

return view('filme')->with('Movies',$filme)->with('categorii',$categorii);

在这里,您将$filme 作为$Movie 变量传递。

{!!$Movies->render() !!}

在这里你想访问$filmerender() 方法,它不是一个对象。

把你的控制器改成这样:

public function getFilmeByCateg()
{
    $categorii = Categorii::all();
    //$Movies = Movies::all();
    $categorie = Request::segment(2);
    $cat = Categorii::where('denumire', '=',$categorie)->first();
    $movie_ids = Categorii_filme::where('categorie_id', '=' ,$cat->categorie_id)->get()->lists('movie_id');


    $filme = Movies::whereIn('movie_id','=',$movie_ids)->paginate(12);


    return view('filme')->with('Movies',$filme)->with('categorii',$categorii);
}

【讨论】:

  • 这个 render() 方法是从哪里来的?你在 Movies 模型上有 render() 吗?
  • 你也可以发布电影模型吗?
  • 它不起作用,该渲染是用于分页,我希望显示分页,我已经显示了电影。
  • 我在控制器中进行了更改,但现在弹出另一个错误:'数组到字符串转换'
【解决方案2】:

好的首先,你做错了。 使用中间类来表示数据透视表是完全不好的。

我会让它为你工作。

您的类别类

class Category extends \Model {
   protected $table = 'categories';

   public function movies()
   {
      return $this->belongsToMany('Your\Namespace\To\Movie');
   }
}

你的电影课

class Movie extends \Model {
   protected $table = 'movies';

   public function categories()
   {
      return $this->belongsToMany('Your\Namespace\To\Category');
   }
}

你的路线还在:

Route::get('categorie/{category_id}','WelcomeController@getFilmeByCateg');

因此,在您的控制器方法中,您执行以下操作:

public function getFilmeByCateg($category_id)
{
   $category = Category::findOrFail($category_id);

   return view('filme')->with('Movies',$category->movies()->paginate(12)->ge())->with('categorii',Category::all());   
}

现在在你看来$Movies->render() 会起作用

【讨论】:

    【解决方案3】:

    如果您不会对数据进行分页,您将如何呈现它? laravel 官方网站上的文档说明:

    有几种方法可以对项目进行分页。最简单的是在查询构建器或 Eloquent 模型上使用 paginate 方法。

    分页数据库结果

    $users = DB::table('users')->paginate(15);
    

    注意:目前,Laravel 无法有效地执行使用 groupBy 语句的分页操作。如果您需要使用 groupBy 与分页结果集,建议您查询数据库并手动创建分页器。

    手动创建分页器

    有时您可能希望手动创建分页实例, 传递给它一个项目数组。您可以通过创建一个 照亮\分页\分页器或 Illuminate\Pagination\LengthAwarePaginator 实例,具体取决于您的 需要。

    现在你应该首先

    use Illuminate\Pagination\LengthAwarePaginator as Paginator;
    

    然后

    $paginator = new Paginator($items, $count, $limit, $page, [
            'path'  => $this->request->url(),
            'query' => $this->request->query(),
        ]);
    

    请在上面的 Paginator 函数中提供相应的参数。

    【讨论】:

      【解决方案4】:

      我知道现在很晚了,但它会帮助遇到同样问题的人。在查询中使用->paginate(10) 而不是->get()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-29
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多