Отношение Laravel на основе JSON

Я прочитал сообщения/ответы об использовании массива json для отношения, но, будучи новичком в этой платформе, я изо всех сил пытаюсь заставить работать часть. Ищу какой-то вклад.

У меня есть модели/классы/таблицы для пользователей и служб

Пользовательская таблица:

------------------------------
id | name      | serviceProvided_id
------------------------------
 1   User1       1
 2   User2       2

Сервисная таблица:

--------------------------
id |    name         |  icon
--------------------------
 1  Service1           1.jpg
 2  Service2           2.jpg
 3  Service3           3.jpg
 4  Service4           4.jpg
 5  Service5           5.jpg

Модель пользователя

    public function serviceProvided()
    {
        return $this->belongsTo(Service::class,'serviceProvided_id','id');
    }

Когда я получаю пользователя из UserController, я могу вернуть с ним отношение для службы:

User::with('serviceProvided')

Работает отлично. Что я хотел бы сделать сейчас, так это сделать servicesProvided более чем одним значением и по-прежнему иметь возможность загружать их все с пользователем.

Я думал, что таблица User будет выглядеть примерно так:

------------------------------
id | name      | serviceProvided_id
------------------------------
 1   User1       [1,2,3]
 2   User2       [1,3,5]

Я читал о пакете от Джонаса С. -relations), но я продолжаю застревать в том, что в этом пакете он не ожидает выделенного столбца, а какой-то другой столбец, в котором есть ключи/значения? Я запутался и был бы признателен за любую помощь, которую я могу получить.

Спасибо, Джей


person JayMan99    schedule 19.11.2019    source источник
comment
Вам нужна сводная таблица для отношений n:n   -  person online Thomas    schedule 20.11.2019
comment
Да, создайте сводную таблицу и определите отношения «многие ко многим». Взгляните на документы.   -  person porloscerros Ψ    schedule 20.11.2019
comment
Ok. Итак, если у меня есть 7 или 8 других моделей, которые вообще не перечислены здесь, сделайте ссылку (или несколько ссылок) на таблицу «Сервисы»... Будет ли для меня лучшим подходом создать все эти дополнительные сводные таблицы?   -  person JayMan99    schedule 20.11.2019


Ответы (1)


Простой способ - создать отношение ownToMany, как вы уже предложили. Но все же, если вы хотите добиться от своего метода, вы можете сделать так:

$user=User::find(1);
foreach($user->serviceProvided_id as $service)
{
$services[]=$service->serviceProvided->name;
}
dd($services);
person Tanvir Ahmed    schedule 20.11.2019