Shlop
@Shlop
Программист

Как правильно сделать выборку из БД и настроить отношения в Laravel?

Здравствуйте, у меня есть модель Region и Image, соответственно таблицы в БД regions и images. Так же есть промежуточная таблица image_region, т.к. отношение между Region и Image многие-ко-многим. Один Region может иметь много картинок, и таблица images у меня одна общая на весь сайт. Проблема в том что когда я редактирую ранее добавленный Region, меняю порядок картинок добавленных к нему, сохраняю. Потом открываю для просмотра этот Region, порядок картинок остается прежним, то есть не изменяется. Хотя вот в промежуточной таблице (image_region) мне удалось сделать так что порядок записей в ней меняется в соответствии с тем какой порядок картинок я задал. Но при выборке как я понял все равно идет запрос к таблице images. И то что у меня там в промежуточной таблице меняется, это никаких результатов не дает. Подскажите пожалуйста как сделать что бы порядок картинок изменялся, я так думаю что наверно мне нужно менять порядок в самой таблице images. Заранее благодарю за ответ.
Запрос на получение картинок выглядит так:
select `images`.*, `image_region`.`region_id` as `pivot_region_id`, `image_region`.`image_id` as `pivot_image_id` from `images` inner join `image_region` on `images`.`id` = `image_region`.`image_id` where `image_region`.`region_id` = 1


Метод в модели Region:
public function images()
{
        return $this->belongsToMany('App\Image', 'image_region');
}


Метод в модели images
public function regions()
{
        return $this->belongsToMany('App\Region');
}


Миграция промежуточной таблицы

Schema::create('image_region', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('region_id');
            $table->foreign('region_id')->references('id')->on('regions');
            $table->unsignedBigInteger('image_id');
            $table->foreign('image_id')->references('id')->on('images');
        });
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
AnatolTh
@AnatolTh
Full Stack Developer
Странное решение вы выбрали. Не лучше ли создать поле в image_region с порядковым номером?

UPD
->orderBy('image_region.id', 'asc')
что бы получилось
select `images`.*, `image_region`.`region_id` as `pivot_region_id`, `image_region`.`image_id` as `pivot_image_id` from `images` inner join `image_region` on `images`.`id` = `image_region`.`image_id` where `image_region`.`region_id` = 1 order by `image_region`.`id` ASC
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы