Создать косвенные отношения и вернуть сумму двух отношений - PullRequest
1 голос
/ 26 сентября 2019

У меня есть программа для обмена услугами между людьми.В основном я сталкиваюсь с проблемой, пытаясь получить разговоры между пользователями.Идея такова: моя программа позволяет пользователям предлагать услуги другим пользователям, а также приобретать услуги у других пользователей.Каждый пользователь может зарегистрировать неограниченное количество услуг.Когда пользователь находит услугу, которую хочет получить, он создает сделку и начинает разговор с контрагентом.Структура моих таблиц следующая (я включаю только столбцы отношений):

Таблица пользователей

id // This is the user identifier

Таблица услуг

id // This is the service identifier
user_id // This is the identifier of the user who created the service

Таблица сделок

id // This is the deal identifier
user_id // This is the identifier of the user acquiring the service
service_id // This is the identifier of the service being acquired in this deal

Таблица бесед

id // This is the identifier of the conversation
deal_id // This is the identifier of the deal that the conversation belongs to

Вот моя проблема: я хочубыть в состоянии извлечь разговоры для каждого пользователя, как в качестве заявителя, так и в качестве продавца.

Я создал это отношение (в User.php) для разговоров, в которых пользователь получает услугу:

    public function conversationsApplicant(){
        return $this->hasManyThrough( Conversations::class, Deal::class );
    }

Я хотел бы также создать функцию messagesSeller ()

    public function conversationsSeller(){
        return $this->????;
    }

Я предполагаю, что должен добавить какую-то связь между разговором и службой в Service.php.Это было бы что-то вроде $this->services()->with( 'deals' )->with( 'conversations' );

Конечной целью было бы иметь метод, который возвращает оба отношения в одном $user->conversations()->get().

public function conversations(){
    return $this->conversationsApplicant() + $this->conversationsSeller();
}

1 Ответ

0 голосов
/ 27 сентября 2019

Вот как вы реализуете объединенные отношения просто

public function getCombinedChats($value)
{
    // There two calls return collections
    // as defined in relations.
    $Applicant= $this->conversationsApplicant;
    $Seller= $this->conversationsSeller;

    // Merge collections and return single collection.
    return $Applicant->merge($Seller);
}
...