Laravel отношение с 3 таблицами - PullRequest
0 голосов
/ 28 февраля 2020

Я работаю над бэкэндом Laravel, главная цель - обработать рецепты в ресторанах (магазинах) и подсчитать, сколько блюд подается в день, в магазине, в смену.

I необходимо составить отчет с указанием рейтинга рецепта, получения имени рецепта и количества блюд, которые подаются (из таблицы рекордов).

Там есть таблицы:

table recipees
 - id
 - name
 - description

table day_recipee_shop_workshifts

 - id
 - day_id
 - recipee_id
 - shop_id
 - workshift_id

table records
 - id
 - day_recipee_shop_workshift_id
 - count

Я пытаюсь получить все записи из таблицы записей, отсортированные по количеству, и для каждой записи получить имя получателя.

Я пробовал с отношениями Laravel, как hasOneThrough, принадлежит человеку без удачи. Может быть, я неправильно понял, как этого добиться, но думаю, что смогу извлечь имя рецепта из модели записи через таблицу day_recipee_shop_workshift.

Заранее спасибо за ваши комментарии!

Ответы [ 3 ]

0 голосов
/ 28 февраля 2020

Вы можете получить записи по следующему запросу:

Record::with(['day_recipee_shop_workshifts.recipees'])->orderBy('count','desc')->get();

Где day_recipee_shop_workshifts - имя отношения, определенное в Запись модель и рецепты - это имя отношения, определенное в DayRecipeeShopWorkShifts Model.

Теперь вы можете получить имя рецепта, как показано ниже:

$recipeName = $record->day_recipee_shop_workshifts->recipees->name;
0 голосов
/ 28 февраля 2020

создайте три функции в модели, напишите, что каждая функция имеет много взаимосвязей и идентификатор является внешними ключами

$ this-> hasMany (\ App \ ModelName :: class, 'post_id', 'id') ;

0 голосов
/ 28 февраля 2020

hasOneThrough - правильный путь, для достижения этого поместите это соотношение в модель Record:

public function recipee()
        {
            return $this->hasOneThrough(
                'App\Recipee', //Check if this is correct model name
                'App\DayRecipeeShopWorkShifts', //Check if this is correct model name
                'recipee_id', 
                'id', 
                'day_recipee_shop_workshift_id', 
                'recipee_id' 
            );
        }

EDITED Проверьте, работает ли оно!

...