YiiFramework Yii2 - hasMany сортировка записей

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "Yii Framework", создана пользователем StalkerClasses, 31 дек 2018.

  1. StalkerClasses

    StalkerClasses Новичок

    Сообщения:
    608
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Есть три таблицы
    Таблица 1
    Таблица 2
    Список выбранных записей в таблице 1 из таблицы 2 сохраняется в промежуточно таблице (таблица 3). Здесь же в таблице 3 сохраняется сортировка - то как и в какой последовательности пользователь выбрал записи.

    Как сделать выборку with() что бы сохранилась сортировка записей которая определена в промежуточной таблице?
     
  2. StalkerClasses

    StalkerClasses Новичок

    Сообщения:
    608
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Уже так много просмотров темы - неужели никто не сталкивался с подобной задачей и нет готового метода реализации?
     
  3. AmdY

    AmdY Пью пиво Команда форума

    Сообщения:
    7.006
    Ваш город:
    Belarus, Minsk
    Address:
    Minsk, Belarus
    Country:
    Location on Map:
    доку открой, там в with или via можно передать ассоциативный массив со значение кэллбэк функцией, где и добавишь свою сортировку.
     
  4. StalkerClasses

    StalkerClasses Новичок

    Сообщения:
    608
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Находил примеры как это делается, но все примеры показывают как отсортировать таблицу №2, а не выборку из промежуточной таблице. У меня сортировка храниться в промежуточной таблице.

    Таблица 1 (машина)
    Ваз
    Газ
    Уаз

    Таблица 2 (водитель на смену)
    Петя
    Саша
    Даша
    Маша

    В таблице №3 сохраняется сортировка выбранных водителей
    Код:
    Ваз:
    - Даша (сортировка 1)
    - Маша (сортировка 2)
    
    Газ
    - Петя (сортировка 1)
    - Даша (сортировка 2)
    
    Уаз
    - Маша (сортировка 1)
    - Петя (сортировка 2)
    - Саша (сортировка 3)
    Все примеры что находил сортируют на основе той сортировки что есть в таблице №2.
     
  5. StalkerClasses

    StalkerClasses Новичок

    Сообщения:
    608
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Код:
    ->viaTable($current_table.'_mm', ['uid_foreign' => 'uid'],
                                function ($query) {
                                    /* @var $query \yii\db\ActiveQuery */
                                    global $current_table, $current_field;
                                      $query ->orderBy([$rel_table.'.uid' => SORT_ASC]);
                            })
    Нашел примеры как это делается. И сортировать получается.
    Но проблема в том что выборка из третей таблицы идет через IN() и его не как не получается отсортировать в зависимости от того как был отсортирован "viaTable"
     
  6. AmdY

    AmdY Пью пиво Команда форума

    Сообщения:
    7.006
    Ваш город:
    Belarus, Minsk
    Address:
    Minsk, Belarus
    Country:
    Location on Map:
    Ну, праивльно же мыслишь, осталось ещё раз отсортировать за пределами via. И не знаю на какой помойке ты искал примеры и зачем там $current_table и т.д., но их хотя бы через use в замыкание стоит передовать, а не городить глобальные переменные.
     
    StalkerClasses нравится это.
  7. grigori

    grigori ( ͡° ͜ʖ ͡°) Команда форума

    Сообщения:
    7.086
    Ваш город:
    Stormwind
    Address:
    Scottsdale, United States
    Country:
    Location on Map:
    ActiveRecord создан для простых запросов. Авторы yii несколько лет думали над оберткой для связей по нескольким таблицам, и решили отказаться. Лучше написать это несколькими запросами с Query Builder.
     
    StalkerClasses нравится это.