所以我使用Vue 2.0和Laravel 5.3来创建一个应用程序.
我使用Laravel提供的内置分页,用Vue实现了自己的可排序表.
一切都很完美 – 除了,我正试图加入一个“媒体”多态表,所以我可以在我的表中显示一个图像.
为了启用排序,我不得不使用查询构建器,因为您无法使用Eloquent(AFAIK)对关系进行排序.
我定义我的关系如:
$inventories = $inventories->leftjoin('users as inventory_user', 'inventories.user_id', '=', 'inventory_user.id');
$inventories = $inventories->leftjoin('categories as category', 'inventories.category_id', '=', 'category.id');
$inventories = $inventories->leftjoin('inventories as parent', 'inventories.parent_id', '=', 'parent.id');
哪个工作很棒.但是,我究竟如何在不重复(复制)任何行的情况下加入多态关系?
我有这个:
$inventories = $inventories->leftJoin('media', function($q) {
$q->on('media.model_id', '=', 'inventories.id');
$q->where('media.model_type', '=', 'App\Models\Inventory');
});
哪个显示媒体(如果它在多态表中有关系).但是,如果我有1个特定库存项目的5个图像(媒体),我的查询会重复库存,但是在我的情况下,它会重复5次.
这是我的选择查询:
$inventories = $inventories->select(DB::raw("
inventories.id as inventory_id,
inventories.name as inventory_name,
inventories.order_column as inventory_order_column,
category.id as category_id,
category.name as category_name,
parent.name as parent_name,
parent.id as parent_id,
inventories.updated_at as inventory_updated_at,
media.name
"));
我想我需要使用groupBy,但我不确定我在哪里定义它.如果我做
$inventories = $inventories->groupBy('inventories.id');
我明白了
SQLSTATE [42000]:语法错误或访问冲突:1055’test.inventories.name’不在GROUP BY中…
有没有人处于类似的情况或知道在哪里把我的groupBy显示1 /不同的库存项目?
编辑:
我能够使用以下方法修复:
$inventories = $inventories->leftJoin('media', function($q) {
$q->on('media.model_id', '=', 'inventories.id');
$q->where('media.model_type', '=', 'App\Models\Inventory');
$q->orderBy('media.order_column', 'asc');
$q->groupBy('model.model_id');
});
然后设置strict =>我的database.php中为false.
最佳答案 由于错误表明当name列不在GROUP BY子句中时会发生此问题.
要解决这个变化
'strict' => true,
在config / database.php文件中的连接下的mysql配置中
'strict' => false,
此外,我强烈建议使用polymorphic relations而不是雄辩的左连接.