Сохранение порядка сортировки при чтении с БД для связанных данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
YurikVD
Сообщения: 16
Зарегистрирован: 2018.08.09, 12:52

Сохранение порядка сортировки при чтении с БД для связанных данных

Сообщение YurikVD »

Суть:
- для заказа выбираем товары через select2 multiple
- сохраняем в промежуточной таблице связи
- в этой же таблице в дополнительном поле sort сохраняем порядок выбранных товаров (0,1,2...) для заказа
- при получении запросом $items = $order->items; привязанных товаров к заказу, товары возвращаются отсортированные по id.

Объясните, пожалуйста, как не потерять сохраненный порядок товаров для заказа

Код: Выделить всё

public function getItems() {
    return $this->hasMany(Item::className(), ['id' => 'item_id'])->viaTable('order_item', ['order_id' => 'id']);
}
Или как правильно организовать такой функционал?
Последний раз редактировалось YurikVD 2019.05.23, 14:22, всего редактировалось 1 раз.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Сохранение порядка сортировки при чтении с БД для связанных данных

Сообщение leonenco »

Во первых указывайте код в теге код, а во вторых вы можете отсортировать таким образом как мне кажется:

Код: Выделить всё

public function getItems() {
    return $this->hasMany(Item::className(), ['id' => 'item_id'])
         ->viaTable('order_item', ['order_id' => 'id'])
         ->orderBy('order_item.sort' => SORT_ASC);
}
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: Сохранение порядка сортировки при чтении с БД для связанных данных

Сообщение Prooksius »

По мне так легче join-ить, запрос можно какой угодно сделать. С этим hasMany у меня не получилось добиться того ,что хотел. Может случай был специфический, не знаю, но с join-ами все получилось на ура.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Сохранение порядка сортировки при чтении с БД для связанных данных

Сообщение unknownby »

Если смотреть по запросу, то сортировка должна пройти таким образом

Код: Выделить всё

public function getItems() {
    return $this->hasMany(Item::className(), ['id' => 'item_id'])
         ->viaTable('order_item', ['order_id' => 'id'], function($query){
         	$query->orderBy('sort' => SORT_ASC);
         });
}
Ответить