Применить условие where к связанным моделям в полиморфном отношении laravel 8

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