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

Я использую 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,
            },
        }   
    }
}

Ответы [ 4 ]

0 голосов
/ 16 января 2019

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

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

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

$services = Service::with('locations')->get(); 
0 голосов
/ 16 января 2019

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

0 голосов
/ 16 января 2019

Вы можете сделать это также В Сервис Модель,

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

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

0 голосов
/ 16 января 2019

Мне удалось выяснить

public function locations() {
    return $this->belongsToMany('App\Locations', 'allowed_locations', 'service_id','location_id');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...