Как получить конкретные столбцы в Laravel Eloquent с нумерацией страниц? - PullRequest
0 голосов
/ 28 октября 2018

Я использую эту схему таблицы:

Schema::create('forms', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name', 255)->default('');
    $table->text('html')->nullable();
    $table->text('json')->nullable();

    $table->timestamps();
    $table->softDeletes();
});

Это модель:

class Form extends Model
{
    use SoftDeletes;

    protected $fillable = [
        'name',
        'html',
        'json'
    ];

    protected $hidden = ['created_at', 'updated_at', 'deleted_at'];
}

И в контроллере я хочу показать список всех элементов модели, но толькоid и name файлов.Теперь я использую это, но оно показывает все не скрытые поля:

public function index() {
    return Form::->paginate(100);
}

Эта функция предназначена только для списка имен форм.Но вот второй для показа данных формы для изменения:

public function show(string $id) {
    $item = Form::findOrFail($id);

    return response()->json($item);
}

Конечно, эта последняя функция должна отображать все поля (id, name, html и json).

Есть ли лучший способ показывать только те поля, которые мне нужны в функции index() при использовании paginate()?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Если я не ошибаюсь, то, надеюсь, вы можете сделать это примерно так, чтобы получить конкретные столбцы вместе с нумерацией страниц:

return Form::paginate(100,['id','name',.....]);
0 голосов
/ 28 октября 2018

Если я правильно прочитал ваш вопрос, вам нужно создать коллекцию объекта Form, в которой в обзоре индекса фактически извлекаются только поля id и name.

Вы можете сделать это довольно легко, создав новый экземпляр коллекции в вашем контроллере:

public function index() {
   // use the Eloquent select() function
   $forms = Form::select('id', 'name')->paginate(100);
   return $forms;
}

Я бы лично поместил эту коллекцию в шаблон репозитория, чтобы его было легче кэшировать. Вот хорошая каноническая ссылка на шаблоны репозитория в Laravel.

В вашей функции показа на контроллере вам не нужно ничего менять, учитывая, что идентификатор все тот же.

Для дальнейшего использования, помните, что метод paginate разбивает на страницы только коллекцию, к которой он вызывается, а не все, что связано с конкретной моделью или чем-то другим, кроме этой коллекции.Таким образом, если вы каким-либо образом создадите новую коллекцию и вызовете метод paginate для этой новой коллекции, то будет разбито только то, что находится внутри.Это довольно мощный материал! Вот ссылка на документацию.

...