Коллекция коллекции Laravel

Specified key was too long; max key length is 767 bytes

Вы получили это сообщение, потому что 1 байт равен 1 символу, только если вы используете набор символов latin-1. Если вы используете utf8, каждый символ будет считаться 3 байтами при определении столбца ключа. Если вы используете utf8mb4, каждый символ будет считаться 4 байтами при определении столбца ключа. Таким образом, вам нужно умножить предел символов вашего ключевого поля на, 1, 3 или 4 (в моем примере), чтобы определить количество байт, которые ключевое поле пытается разрешить. Если вы используете uft8mb4, вы можете определить только 191 символ для собственного поля InnoDB, primary key. Просто не нарушайте 767 байт.

0
задан Miroslav Grofčík - DeMi Studio 18 March 2019 в 15:59
поделиться

2 ответа

Просто сделайте

$type->products()->orderBy('price')->get();

или

Product::orderBy('price')->get();

Если вы хотите получить более подробный ответ, поделитесь большим количеством кода (модели, контроллеры и т. Д.), Чтобы я знал, как использовать разные модели / раствор

0
ответ дан Marcus 18 March 2019 в 15:59
поделиться

Поскольку у вас есть отношения один ко многим, вам нужно будет объединиться. Мне проще пойти по другому пути, то есть сгруппировать все товары по их типу и порядку по минимальной цене.

 $types = Product::with('type')->groupBy('type_id')
         ->select('type_id', \DB::raw('MIN(price) as minPrice'))
         ->orderBy('minPrice')
         ->get()
         ->pluck('type');

Это предполагает, что у вас есть отношение типа, определенное в продукте с именем «тип».

0
ответ дан apokryfos 18 March 2019 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: