Предположим, у меня 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'); }
Конечная цель – объединить сбор изображений с результатами запроса по предмету и стилю.
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();