eloquent #laravel-8 #polymorphic-relationship
#красноречивый #laravel-8 #полиморфное отношение
Вопрос:
Я столкнулся с проблемой в полиморфных отношениях, когда я не могу заставить whereHas работать. Код отношения отлично работает для возврата связанных моделей, но нужно ли применять условия where к отношениям моделей, связанных с полиморфными отношениями?
Мое полиморфное отношение отображается двумя моделями. например: события и собрания обе модели имеют свои собственные отношения для хранения своих правопреемников (принадлежат многим) Мне нужно применить условие where к отношению правопреемников, чтобы получить требуемые данные, в моем полиморфном отношении я получил данные с правопреемниками, но не с примененным условием.
class MainEvant extends Model
{
public function eventheadable()
{
return $this->morphTo('eventhead', 'event_type_id', 'event_id')
->morphWith([ Events::class=>['assignee'],
Meeting::class=>['assignee'], ]);
}
}
Комментарии:
1. можете ли вы поделиться тем, что вы сделали?
2. Мое полиморфное отношение отображается двумя моделями. например: события и собрания обе модели имеют свои собственные отношения для хранения своих правопреемников (принадлежат многим) Мне нужно применить условие where к отношению правопреемников, чтобы получить требуемые данные, в моем полиморфном отношении я получил данные с правопреемниками, но не с примененным условием.
public function eventheadable() { return $this->morphTo('eventhead', 'event_type_id', 'event_id') ->morphWith([ Events::class=>['assignee'], Meeting::class=>['assignee'], ]); }
Ответ №1:
Недавно я также столкнулся с аналогичной проблемой, я решил ее таким образом, не уверен в качестве кода
В вашем контроллере ,
MainEvant::with('eventheadable')->whereHasMorph('eventheadable',Events::class,function ($query) {
$query->whereHas('assignee', function ($q) {
$q->where(); // Your Condition
});
})->orwhereHasMorph('eventheadable', Meeting::class,function ($query) {
$query->whereHas('assignee', function ($q) {
$q->where(); // Your Condition
});
})->get();
Также проверьте это в официальном документе,
Документы: https://laravel.com/docs/8.x/eloquent-relationships#querying-morph-to-relationships