В догонку к вопросу
Как сделать динамический scope в relation?
Есть вот такая схема:

Нужно сделать relation типа HasMany, но который всегда содержал бы все AgreementType с отметкой, принята ли последняя редакция соглашения каждого типа.
Все данные по профилям получить можно таким вот запросом:
$profiles = Profile::limit(5)->get();
$profileTable = with(new Profile)->getTable();
$agreementTypeTable = with(new AgreementType)->getTable();
$agreementProfileTable = with(new AgreementProfile())->getTable();
$query = AgreementType::select("$agreementTypeTable.*", "$profileTable.id as profile_id")
->join($profileTable, DB::raw('1'), '=', DB::raw('1'))
->whereIn('profiles.id', $profiles->pluck('id'))
->addSelect(DB::raw("exists(select * from $agreementProfileTable where $agreementProfileTable.agreement_id = $agreementTypeTable.last_agreement_id and $agreementProfileTable.profile_id = $profileTable.id and $agreementProfileTable.agreement_id = $agreementTypeTable.last_agreement_id) as last_agreement_approved"));
$query->get();
Но дальше нужно результат выводить результат $profiles и было бы очень удобно, если бы к соответствующему profile был бы уже приделан отфильтрованный результат.
Есть ли возможность запихать декартово произведение в relation?