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






Я смог выяснить
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
Вы также можете сделать это В модели Услуга,
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();
Привет, Амин, добро пожаловать в Stack Overflow. Я бы посоветовал включить в ваш ответ несколько примеров кода. Этот ответ имел бы большое значение, если бы в примерах кода использовалась схема, которую OP уже подробно описал. Удачи.