Получить данные из таблицы, связанной с сводной таблицей - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть множество отношений, из которых получается средняя таблица

пользователи

цитаты

user_quote (это промежуточное звено)

Из этого промежуточная таблица У меня есть еще одно отношение ко многим с другой таблицей (quotes_time)

Схема базы данных изображений

ER DIAGRAM

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

    public function quotes()
 {
    return $this->belongsToMany(Quote::class, 'quote_user');
 }

Модель цитаты:

public function users()
{
  return $this->belongsToMany(User::class, 'quote_user');
}

Как получить данные из таблицы quotes_time?

В контроллере пользователя у меня есть это:

 $users = User::with('latestQuotes','latestQuotes.vehicle')->filter($request);

Что мне действительно нужно, так это получить данные quotes_time от пользователей

Извините за мой английский sh

1 Ответ

0 голосов
/ 13 апреля 2020

У вас есть 2 варианта.

1. Доступ к отношениям BelongsTo из модели Pivot.

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

public function quotes()
{
    return $this->belongsToMany(Quote::class, 'quote_user')->using(QuoteUser::class);
}

Модель цитирования:

public function users()
{
    return $this->belongsToMany(User::class, 'quote_user')->using(QuoteUser::class);
}

Модель QuoteUser Pivot

class QuoteUser extends Pivot
{
    public function time()
    {
        return $this->belongsTo(QuoteTime::class, 'user_quotes_id');
    }
}
$users = User::with('quotes')->get();

foreach ($user->quotes as $quote) {
    $quote->pivot->time->start;
}

2. Использование отношения hasManyThrough между пользователем и QuoteTime (или Quote и QuoteTime)

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

public function quotes()
{
    return $this->belongsToMany(Quote::class, 'quote_user')->using(QuoteUser::class);
}

public function quoteTimes()
{
    return $this->hasManyThrough(QuoteTime::class, QuoteUser::class);
}

Модель цитирования:

public function users()
{
    return $this->belongsToMany(User::class, 'quote_user')->using(QuoteUser::class);
}

public function quoteTimes()
{
    return $this->hasManyThrough(QuoteTime::class, QuoteUser::class);
}
$users = User::with('quoteTimes')->get();

foreach ($user->quotes_times as $quote_time) {
    $quote_time->start;
}
// or
$user = User::with('quotes.quoteTimes')->get();

foreach ($user->quotes as $quote) {
    $quote->quote_times->...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...