Как сократить код выборки с промежуточной таблицы?

Который результат я хочу получить примерно выглядит так, но я не знаю как его написать на laravel сокращено.
$id_direction = [];
        //Получаем id direction c условие что вывести все значение у авторизованного пользователя
        $directions = Direction::where('id_user', Auth::user()->id)->get();
        foreach ($directions as $value){
            // Сравниваем id который получили из моделе direction с промежуточной таблицы Execute_direction
            $directionExecute = Exectue_direction::where('direction_id', $value->id)->get();
            foreach ($directionExecute as $item){
                //Получаем всех execute c который id direction должен совпадать
                $executes = Execute::where('id', $item->execute_id)->get();
                foreach ($executes as $key => $execute){
                    // Выходит многомерный массив из следующий данных id_direction -> id_execute и вписываем id name и last name в массив
                    $id_direction[$value->id]['name'] = $value->name;
                $id_direction[$value->id]['execute'][$item->execute_id]['id'] = $execute->id;
                $id_direction[$value->id]['execute'][$item->execute_id]['name'] = $execute->name;
                $arr[$value->id]['execute'][$item->execute_id]['last_name'] = $execute->last_name;
                }
            }

        }

        dd($id_direction);

Только это реализовать мне трудно сделать рефакторинг кода потому что не пойму как его использовать и что примерно надо применять в данном моделе таблица у меня следующая
direction
id
name
id_user

execute_direction
execute_id
direction_id

execute
id
name
last_name
id_user
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@rusline18 Автор вопроса
class Direction extends Model
{
    protected $table = 'direction';
    protected $fillable = ['id_user', 'name'];

    public function executes()
    {
        return $this->belongsToMany('Growth\Execute', 'execute_direction');
    }
}


$arr = [];
        $directions = Direction::where('id_user', Auth::user()->id)->get();
        foreach ($directions as $value){
            $execute = Direction::find($value->id)->executes()->get();
            foreach ($execute as $key => $item){
                $arr[$value->id]['name'] = $value->name;
                $arr[$value->id]['execute'][$item->id]['name'] = $item->name;
                $arr[$value->id]['execute'][$item->id]['last_name'] = $item->name;

            }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
iNickolay
@iNickolay
Проще некуда, настройте отношения и код у вас будет в одну строчку.
Ответ написан
Ваш ответ на вопрос

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

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