результат сводной таблицы объединяется с другой таблицей - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть эти таблицы:

пакетов id package_name

package_subject (сводная таблица) package_id subject_id

предметов id subject_name class_id

classess id class_name

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

$subjects = Subject::whereHas('packages', function ($q) use ($package_id) {
    $q->where('package_id', $package_id);
})->get();

Мне нужно получить имя класса, связанное с темой, как я могу переписать вышеупомянутый запрос, чтобы получить также соответствующее имя класса

1 Ответ

0 голосов
/ 12 февраля 2020

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

Проблема может заключаться в использовании зарезервированного слова "класс". Я бы рекомендовал избегать таких слов в именах. Используйте "subjectClass" или что-то вроде.

class SubjectClass extends Model
{
  protected $table = 'classes';
}

...

class Subject extends Model
{

...

  public function subjectClass()
  {
    return $this->belongsTo(SubjectClass::class, 'class_id');
  }
}

...

$subjects = Subject::whereHas('packages', function ($q) use ($package_id) {
    $q->where('package_id', $package_id);
})->get();

echo $subjects->first()->subjectClass->class_name;

Конечно, здесь есть место для оптимизации "нетерпеливой загрузки" и альтернативных подходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...