Красноречиво, модель имеет много, но не имеет прямого отношения - PullRequest
0 голосов
/ 18 февраля 2019

не могу обойти меня этим!Я использовал атрибуты, однако это вызывало выполнение нескольких запросов, а не one .

У меня есть множество местоположений , каждый из которых имеет свой собственный набор социальных сетей и контактов данных.Мои социальные сети и контактные данные хранятся в отдельной таблице, эти таблицы также связаны с таблицей с информацией о типе данных.

Итак, в качестве примера.

местоположения

id      name      full_name
1       'Test'    'Testing'

location_contact

id      content     type_id     location_id
1      '4532432'       3            1

contact_types

id      value      link
3    'telephone'  'tel:'

Местоположение может иметь несколько одинаковых типов контактов, поэтому мне нужно сгруппировать их все по типу контакта.Итак, мои ожидаемые данные будут:

[
    0 => [
        'id' => 1,
        'name' => 'Test',
        'full_name' => 'Testing',
        'contact' => [
            'telephone' => [
                'id' => 3,
                'value' => 'telephone',
                'link' => 'tel:',
                'data' => [
                    0 => [
                        'id' => 1,
                        'content' => 4532432,
                        'type_id' => 3,
                        'location_id' => 1
                    ]
                ]
            ]
        ]
    ]
]

Как бы я поступил так?Или было бы легче манипулировать данными, когда они были получены всего одним запросом?

1 Ответ

0 голосов
/ 18 февраля 2019

Предлагаю пересмотреть дизайн ваших отношений.Тем не менее, я предлагаю вам использовать отношения и мутаторы в модели Location.

На модели Locations:

protected $appends = ['contact'];

public function getContactAttribute(){
    $res = [];
    $res['telephone'] = $this->contactTypes[0];
    $res['telephone']['data'] = $this->contacts;

    return $res;
}

public function contactTypes()
{
    return $this->belongsToMany("App\ContactType", 'location_contact', 'location_id', 'type_id');
}

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