Объединение коллекций в laravel из отношений

Предположим, у меня 3 таблицы.

  1. Изображений
  2. Предмет
  3. Стиль

Отношения много для многих (изображения, темы) и от многих до многих (изображения, стиль). Теперь я хочу сделать что-то вроде:

$result=$subjectResult->images()->merge($styleResult->images()) . Я хочу, чтобы тип результата был Объектом коллекции изображений.

До сих пор я пробовал это как:

 $subjectResult=Subject::with('images')->where(query)->get(); 

Но это возвращает строки темы, строки изображения и сводные строки. Я хочу извлечь из него коллекцию изображений.

Модель изображения:

 public function styles(){ return $this->belongsToMany('Style','style_images','image_id','keyword_id'); } public function subjects(){ return $this->belongsToMany('Subject','subject_images','image_id','subject_id'); } 

Конечная цель – объединить сбор изображений с результатами запроса по предмету и стилю.

Related of "Объединение коллекций в laravel из отношений"

 Image::has('styles')->orHas('subjects')->get(); 

Вы можете получить коллекцию изображений из темы и стиля отдельно и объединить их в один единый код коллекции, что-то вроде этого

 $images = new Collection(); $images = $images->merge($subject->images); $images= $images->merge($style->images); 

Ладно, так вот, что сработало для меня. Использование whereHas и orWhereHas работал для меня. Спасибо всем за помощь.

 $results=Image::whereHas('subjects',function($q) use ($searchParam){ $q->where('subject','LIKE','%'.$searchParam.'%'); })->orWhereHas('styles',function($q) use ($searchParam){ $q->where('style','LIKE','%'.$searchParam.'%'); })->get();