2015-06-05 2 views
0

Я пытаюсь постраничной некоторые категории и эта ошибка выскочила из ниоткуда, и я не знаю, как это исправить:Laravel 5 пагинация вызов функции члена визуализации() на не-объект

Обращение к функции члена визуализации() на не-объект

Это мой контроллер:

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); 
} 

И это, как я визуализации Paginator в моем макете:

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

Это в моих маршрутах:

Route::get('categorie/{categorie}','[email protected]'); 

Это в моем Movies.php:

class Movies extends Model { 

protected $table = "movies"; 
} 

Может кто-нибудь сказать мне, как я могу управлять, чтобы сделать эту работу?

+0

Ваш код - настоящий беспорядок. Можете ли вы показать нам свою декларацию маршрута к этому методу? И почему у вас есть класс Category_filme? Этот класс представляет вашу сводную таблицу между вашими фильмами и вашими категориями? – ChainList

+0

yes in categorii_filme У меня есть идентификатор категории и идентификатор фильма – Urarii

+0

Я предполагаю, что вы новичок в Laravel. Я не могу сделать больше, чем советовать вам внимательно прочитать документацию laravel Rloquent. – ChainList

ответ

0

С $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() !!} 

А вот вы хотите получить доступ к render() метод $filme, который не является объектом.

Изменить контроллер для этого:

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); 
} 
+0

так что я могу сделать? – Urarii

+0

Откуда этот метод render()? У вас есть рендер() на модели фильмов? – RY35

+0

Можете ли вы опубликовать фильм? – RY35

0

OK Прежде всего, вы сделали это неправильный путь. Использование промежуточного класса для представления сводной таблицы является абсолютно плохим.

Я заставлю его работать на вас.

Ваш Категория класс

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

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

Ваш класс Movie

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

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

Ваш маршрут по-прежнему:

Route :: получить ('Категория/{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() будет работать

0

Если вы не постраничной ваши данные как бы вы сделать его? Документы на официальном сайте laravel:

Существует несколько способов разбиения на страницы элементов. Простейшим является использование метода paginate в построителе запросов или модели Eloquent.

база Paging результаты

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

Примечание: В настоящее время операции разбиения на страницы, которые используют заявление GroupBy не может быть выполнена эффективно Laravel. Если вам нужно использовать groupBy с разбитым на страницы набором результатов, рекомендуется запросить базу данных и создать файл-указатель вручную.

Создание Paginator вручную

Иногда вы можете создать экземпляр постраничной вручную, передавая ей массив элементов. Вы можете сделать это, создав либо Illuminate \ Pagination \ Paginator, либо 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 выше.

0

Я знаю, что очень поздно, но это поможет кому-то, кто попадает в ту же проблему. Вместо ->get() используйте запрос ->paginate(10).

Смежные вопросы