优化Laravel Backpack n-n关系中的查询

时间:2017-08-01 09:55:04

标签: php mysql laravel-5.4 backpack-for-laravel

我正在为Laravel Backpack的网站建立一个后端面板。这真的很好,但我注意到关系查询非常昂贵。

我有两种模式:产品中心,它们之间有多对多的关系。在我的CenterCrudController中,我以这种方式定义了一个字段:

$this->crud->addColumns([
    // More fields...
    [      
        'label' => 'Products',
        'type' => 'select2_multiple',
        'name' => 'products', // the method that defines the relationship in your Model
        'entity' => 'products', // the method that defines the relationship in your Model
        'attribute' => 'name', // foreign key attribute that is shown to user
        'model' => 'App\Models\Product', // foreign key model
        'pivot' => true, // on create&update, do you need to add/delete pivot table entries?
     ],
     // More fields...
]);

工作正常,显示带有相关模型的选择多个字段。但是使用的查询是SELECT * FROM products,这是非常昂贵的(表产品有数千条记录,大约有25列)。

在此示例中,我只需要 id name 字段。我正在寻找像Query Builder select()方法之类的东西。

有没有办法优化这种类型的查询?

提前致谢!

1 个答案:

答案 0 :(得分:1)

不确定这是否真的是一个答案,但无论如何我都会发布它。

最好的解决方案(由@tabacitu指出)使用select2_from_ajax field。只有当用户点击选择字段时,它才会减慢页面加载并发出ajax请求以检索数据。