2

我使用这个表模式:

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'];
}

在控制器中,我想显示所有模型项目的列表,但只有idname文件。现在我使用它,但它显示所有未隐藏的字段:

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()使用 with 的函数中需要的字段paginate()

4

2 回答 2

4

如果我没有错,那么希望您可以这样做以获取特定列以及分页:

return Form::paginate(100,['id','name',.....]);
于 2018-10-28T17:18:40.100 回答
1

如果我正确阅读了您的问题,您想要做的是创建一个Form对象集合,其中只有idname字段在索引概述中实际检索到。

您可以通过在控制器中创建一个新的集合实例来轻松地做到这一点:

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

我个人会将该集合放在存储库模式中,以使其更易于缓存。这是对 Laravel 中存储库模式的一个很好的规范参考。

在您的控制器上的显示功能中,您无需更改任何内容,因为 ID 仍然相同。

为了将来参考,请记住 paginate 方法仅对调用它的集合进行分页,而不是与特定模型或该集合以外的任何内容相关的所有内容。因此,如果您以任何方式创建一个新集合,并在该新集合上调用 paginate 方法,则只会对其中的任何内容进行分页。这是相当强大的东西!这是文档参考。

于 2018-10-28T10:58:08.113 回答