Laravel Eloquent Eager Load из нескольких столов - PullRequest
0 голосов
/ 16 января 2019

Я относительно новичок в Laravel и только недавно начал узнавать о стремительной загрузке. В настоящее время у меня есть проект, в котором я должен был разработать приложение для связи между компаниями и партнерами.

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

В классе Connection , я использую polymorphic для извлечения всех соединений для компании / партнера:

public function connectable()
{
    return $this->morphTo();
}

И эта функция в Партнер и Компания Классы:

public function my_connection()
{
    return $this->morphMany(Connection::class, 'connectable', 'model_type', 'model_id');
}

Я могу получить список соединений просто отлично, но проблема возникает, когда я хочу получить подробную информацию о каждой подключенной компании / партнере. Я хочу использовать нетерпеливую нагрузку в Connection классе, как показано ниже, но он может получить только от компании или партнера, но не от обоих

protected $with = [
    'following'
];

public function following()
{
    return $this->belongsTo(Company::class, 'connect_to', 'id');
}

Возможно ли это сделать? Или я должен разделить связи между компанией и партнером в разные таблицы?

Редактировать : Под связью я имел в виду, что партнер или компания могут подключаться / следовать друг за другом, как обычное приложение для социальных сетей. Это не было взаимно, хотя. Скажем, если партнер А следует за партнером Б, то будет сохранено только это соединение. Партнер B по-прежнему считается не подключенным к A.

1 Ответ

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

Я не уверен, какую именно модель вы хотите загрузить (например, model_type или connect_type), но в любом случае вы можете использовать отношение morphTo, например:

public function following()
    {
        return $this->morphTo(null, $type = 'connect_type', $id = 'connect_to');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...