Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.11.2016 21:08:32

Не работает пагинация в 5.3

Здравствуйте.
Получаю данные из модели:

$companies = Company::select('*')->paginate(20);

Вывожу их во view:

    <table class="table table-hover">
        <thead>
        <tr>
            <th>№</th>
            <th>Название</th>
            <th>Город</th>
            <th>Email</th>
            <th></th>
        </tr>
        </thead>
        <tbody>

        @foreach($companies as $company)
<?php //dd($company);?>
            <tr>
                <td>{{ $company->id }}</td>
                <td>{{ $company->name }}</td>
                <td><a href=""><i class="fa fa-filter" )></i></a>&nbsp;{{ $company->city->name }}</td>
                <td>{{ $company->email }}</td>
                <td>
                    <a href="#" class="btn btn-default" title="Редактировать"><i class="fa fa-edit"></i></a>
                    <a href="#" class="btn btn-danger" title="Удалить"><i class="fa fa-trash"></i></a>
                </td>
            </tr>

        @endforeach

        </tbody>
    </table>

    {{ $companies->render() }}

Но при переходи по страницам всегда открыта первая страница. В чем может быть проблема?

Не в сети

#2 08.11.2016 01:06:23

Re: Не работает пагинация в 5.3

Вы не знаете SQL и не знаете Eloquent/
Так нельзя

::select('*')

Либо делайте

::where(1,'='1)

либо ничего не указывайте.

Это во первых.

Во вторых либо используйите встроенный пагинатор

{{ $companies->links() }}

Который описан В ДОКУМЕНТАЦИИ: https://laravel.ru/docs/v5/pagination

либо к своим ссылкам добавляйте ?page=X, где Х = номер страницы, который можно понять из вычислений, компоненты которых есть в объекте $companies

Не в сети

#3 08.11.2016 07:05:31

Re: Не работает пагинация в 5.3

Во вторых либо используйите встроенный пагинатор

{{ $companies->links() }}

Он уже использует его:

{{ $companies->render() }}

links() - это синоним render() и он не делает ничего, кроме того, что вызывает render():

public function links($view = null)
{
    return $this->render($view);
}

Не в сети

#4 08.11.2016 08:34:16

Re: Не работает пагинация в 5.3

AlexeyMezenin пишет:

Он уже использует его:

{{ $companies->render() }}

Прошу простить дилетантский вопрос, а в 5.3 это работает?

Не в сети

#5 08.11.2016 12:36:31

Re: Не работает пагинация в 5.3

Androbim пишет:

Прошу простить дилетантский вопрос, а в 5.3 это работает?

Да. Более того, links() метод deprecated еще с 5.0 и рекомендуется использовать render(). Это означает, что в одной из версий links() уберут, как убрали ::controller, например. Посмотри исходный код и все станет ясно. Если в двух словах, то весь функционал живет в render(), а links() только вызывает render().

Изменено AlexeyMezenin (08.11.2016 12:37:52)

Не в сети

#6 08.11.2016 12:42:43

Re: Не работает пагинация в 5.3

Понял, спасибо, буду знать.

Не в сети

#7 08.11.2016 21:12:28

Re: Не работает пагинация в 5.3

hzone пишет:

Вы не знаете SQL и не знаете Eloquent/
Так нельзя

::select('*')

Либо делайте

::where(1,'='1)

либо ничего не указывайте.

Это во первых.

эта конструкция работает, возвращает все поля и так принято в SQL (SELECT * FROM ...)
Я поменял на $companies = Company::paginate(5); но все равно возвращает только первую страницу на пагинацию не обращает внимания

Не в сети

#8 08.11.2016 21:22:19

гость15

Re: Не работает пагинация в 5.3

$companies = Company::paginate(20);

#9 08.11.2016 22:10:37

Re: Не работает пагинация в 5.3

Так на первой странице пять компаний, так? А в пагинаторе сколько страниц? Сами ссылки в пагинаторе присутствуют, только не работают, или их вообще нет?

Не в сети

#10 08.11.2016 23:18:43

Re: Не работает пагинация в 5.3

Androbim пишет:

Так на первой странице пять компаний, так? А в пагинаторе сколько страниц? Сами ссылки в пагинаторе присутствуют, только не работают, или их вообще нет?

Всего в БД около 100 компаний, в пагинации настроена 20 и на странице выводится 20 (5 - это я опечатался), в пагинации есть ссылки на все 5 страниц, при переходе по пагинации в в url добавляется ?page=4 , но страница всегда остается открытая первая

Не в сети

#11 09.11.2016 06:38:04

Re: Не работает пагинация в 5.3

А не пробовали повторить в точности, как в документации, и без разметки? Работает?

Не в сети

#12 09.11.2016 16:26:13

Re: Не работает пагинация в 5.3

Androbim пишет:

А не пробовали повторить в точности, как в документации, и без разметки? Работает?

у меня и сделано как в документации

$companies = Company::paginate(20);

Но разметку не убирал, не вижу смысла, как разметка может повлиять?

Не в сети

#13 09.11.2016 16:36:11

Re: Не работает пагинация в 5.3

И я не вижу, если честно. Просто такой у меня способ, свести все к эталону, если не пойми что происходит. Мало ли :-)

Не в сети

#14 09.11.2016 22:40:18

Re: Не работает пагинация в 5.3

ссылки вида link?page=1 ,    link?page=2 работают?

Не в сети

#15 10.11.2016 10:30:25

Re: Не работает пагинация в 5.3

hzone пишет:

ссылки вида link?page=1 ,    link?page=2 работают?

Да, по ним переходишь нормально, но контент всегда выводится c ?page=1

Не в сети

#16 10.11.2016 12:19:09

Re: Не работает пагинация в 5.3

AlexeyMezenin пишет:

Да. Более того, links() метод deprecated еще с 5.0 и рекомендуется использовать render(). Это означает, что в одной из версий links() уберут, как убрали ::controller, например. Посмотри исходный код и все станет ясно. Если в двух словах, то весь функционал живет в render(), а links() только вызывает render().

А где посмотреть, что метод deprecated?

Просто непонятно тогда, почему в документации примеры до сих пор с {{ $users->links() }}
Вопрос больше риторический конечно.

Не в сети

#17 10.11.2016 13:04:56

Re: Не работает пагинация в 5.3

Fubu_By пишет:
hzone пишет:

ссылки вида link?page=1 ,    link?page=2 работают?

Да, по ним переходишь нормально, но контент всегда выводится c ?page=1

ПОКАжИ ПОЛНОСТЬю МОДЕЛЬ КОМПАНИЙ
и почему до сих пор никто не спросил? умники smile

Не в сети

#18 10.11.2016 17:04:54

гость15

Re: Не работает пагинация в 5.3

hzone пишет:
Fubu_By пишет:
hzone пишет:

и почему до сих пор никто не спросил? умники smile

потому что умники читаю. Написанно же с самого начало.

Fubu_By пишет:

Но при переходи по страницам всегда открыта первая страница. В чем может быть проблема?

и далее

Fubu_By пишет:

Всего в БД около 100 компаний, в пагинации настроена 20 и на странице выводится 20 (5 - это я опечатался), в пагинации есть ссылки на все 5 страниц, при переходе по пагинации в в url добавляется ?page=4 , но страница всегда остается открытая первая

#19 10.11.2016 17:31:34

гость15

Re: Не работает пагинация в 5.3

проверь так

$currentPage = Request::input('page');

// force current page to 5
Paginator::currentPageResolver(function() use ($currentPage) {
    return $currentPage;
});

$companies = Company::paginate(20);

#20 10.11.2016 17:54:28

Re: Не работает пагинация в 5.3

XFR пишет:

А где посмотреть, что метод deprecated?

Просто непонятно тогда, почему в документации примеры до сих пор с {{ $users->links() }}
Вопрос больше риторический конечно.

https://laravel.com/docs/5.3/upgrade#upgrade-5.0

Replace any calls to $paginator->links() with $paginator->render()

Не в сети

#21 11.11.2016 10:20:24

Re: Не работает пагинация в 5.3

hzone пишет:

ПОКАжИ ПОЛНОСТЬю МОДЕЛЬ КОМПАНИЙ

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use SleepingOwl\Admin\Traits\OrderableModel;

class Company extends Model
{
    use SoftDeletes;
    use OrderableModel;

    protected $table = 'companies';

    public function city()
    {
        return $this->belongsTo(City::class);
    }

    public function cuisine()
    {
        return $this->belongsTo(Cuisine::class);
    }

    public function products()
    {
        return $this->hasMany(Product::class, 'company_id');
    }

    public function transactions()
    {
        return $this->hasMany(Transaction::class, 'company_id');
    }

    public function companyReviews()
    {
        return $this->hasMany(CompanyReview::class, 'company_id');
    }

    public function productscsv()
    {
        return $this->hasMany(ProductCsv::class, 'company_id', 'id');
    }



    public function scopeCity($query, $cityID)
    {
        return $query->where('city_id', $cityID);
    }

    public function scopePublished($query)
    {
        return $query->where('status', 1);
    }

    public function getOrderField()
    {
        return 'order';
    }

    public function setPaymentTypeAttribute($value)
    {
        $this->attributes['payment_type'] = empty($value) ? '' : implode(',', $value);
    }

    public function getPaymentTypeAttribute($value)
    {
        return explode(',', $value);
    }

    public function getLink()
    {
        return 'ресторан/' . $this->url;
    }

    public function getCategories()
    {
        $categoriesID = $this->products()->pluck('category_id')->unique()->toArray();

        return Category::whereIn('id', $categoriesID)->get();
    }

    public function getCuisines()
    {
        $cuisinesID = $this->products()->pluck('cuisine_id')->unique()->toArray();

        return Cuisine::whereIn('id', $cuisinesID)->get();
    }

    public static function boot()
    {
        static::creating(function($instance)
        {
            $pattern     = '#[^-а-яА-Яa-zA-Z0-9_ ]/u#';
            $name = preg_replace($pattern, ' ', $instance->name);

            $name = mb_strtolower(trim($name));

            $pattern = '#[-_ ]+#';

            $name = preg_replace($pattern, '-', $name);

            $instance->url = $name;
        });
        parent::boot();
    }

}

Изменено Fubu_By (11.11.2016 10:20:46)

Не в сети

#22 11.11.2016 10:29:46

SerjKAZAN

Re: Не работает пагинация в 5.3

Fubu_By пишет:
hzone пишет:

ссылки вида link?page=1 ,    link?page=2 работают?

Да, по ним переходишь нормально, но контент всегда выводится c ?page=1

Попробуй когда рендеришь appends
$paginator->appends(['value']=> $request)->render()

подробнее тут
http://laravel.su/docs/5.0/pagination#a … tion-links

#23 11.11.2016 11:31:08

Re: Не работает пагинация в 5.3

Убери boot() и посмотри без него (догадка). И если я правильно понял действия в буте, то для управления аттрибутами стоит пользоваться методами setNAMEAttribute / getNAMEAttribute

для примера App\User.php:

	/**
	 * @param $password
	 */
	public function setPasswordAttribute( $password )
	{
		$this->attributes[ 'password' ] = Hash::make( $password );
	}

Не в сети

#24 12.11.2016 12:56:26

Re: Не работает пагинация в 5.3

странно получается, когда пытаюсь получить текущую страниц:

$currentPage = $companies->currentPage();

то всегда возвращает первую

Не в сети

#25 12.11.2016 14:06:36

Re: Не работает пагинация в 5.3

Paginator::resolveCurrentPage()

тоже всегда возвращает первую страницу. Получается что проблема в самом Paginator

Не в сети

Подвал раздела