Как настроить красноречивые отношения для таблицы запросов, где связь между двумя таблицами существует в третьей таблице

Я использую Laravel 5.7 и mysql. Мне нужна помощь в налаживании красноречивых взаимоотношений между 3-мя таблицами.

Локации

id
city
state

Услуги

id
name

Allowed_Locations

location_id (id from Locations table)
service_id (id from Services table)

Локации

id, city, state
1, San Diego, California
2, Seattle, Washington 
3, Portland, Oregon 

Услуги

id, name 
1, Tax Services
2, Legal Services

Разрешенные местоположения

location_id, service_id
1, 1
1, 2
3, 2

Обычно одна услуга может быть доступна во многих местах. Я хочу иметь возможность запрашивать службы, а также места, в которых они доступны.

Вот пример того, что я хочу вернуть. Я знаю, как это сделать с помощью MySQL, но не знаю, как установить красноречивые отношения.

{
    {
        id: 1,
        name: Tax Services
        locations: 
        {
            {
                id: 1,
                city: San Diego,
                state: California,
            },
            {
                id: 2,
                city: Seattle,
                state: Washington,
            },
            {
                id: 3,
                city: Seattle,
                state: Washington,
            },
        }
    },
    {
        id: 2,
        name: Legal Services
        locations: 
        {
            {
                id: 3,
                city: Portland,
                state: Oregon,
            },
        }   
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
64
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Я смог выяснить

public function locations() {
    return $this->belongsToMany('App\Locations', 'allowed_locations', 'service_id','location_id');
}

между местоположением и сервисом существует взаимосвязь «многие ко многим», поэтому вам просто нужно прочитать раздел Laravel «Многие ко многим» и добавить некоторые функции в свои модели, а также выполнить миграцию для вашей сводной таблицы. https://laravel.com/docs/5.7/eloquent-relationships#many-to-many

Привет, Амин, добро пожаловать в Stack Overflow. Я бы посоветовал включить в ваш ответ несколько примеров кода. Этот ответ имел бы большое значение, если бы в примерах кода использовалась схема, которую OP уже подробно описал. Удачи.

Stewart 15.01.2019 23:49

Вы также можете сделать это В модели Услуга,

public function locations() {
    return $this->belongsToMany('App\Locations', 'allowed_locations');
}

Вам необходимо передать service_id в качестве третьего аргумента и location_id в качестве четвертого аргумента, если у вас другой первичный ключ в таблицах Услуги и Локации.

сделай эти отношения в твоей службе красноречивыми

public function locations() {
         return $this->belongsToMany('App\Location', 'allowed_locations', 
         'service_id','location_id');
       }

и в контроллере используйте этот запрос, чтобы получить все службы с несколькими местоположениями

$services = Service::with('locations')->get(); 

Другие вопросы по теме