从关系中合并 laravel 中的集合
Merge collections in laravel from relations
假设我有 3 张桌子。
- 图片
- 主题
- 风格
关系是多对多(Images,Subject)和多对多(Images,Style)。
现在我想做类似的事情:
$result=$subjectResult->images()->merge($styleResult->images())
。
我希望结果类型是图像集合对象。
到目前为止,我已经尝试过:
$subjectResult=Subject::with('images')->where(query)->get();
但是这个 returns 主题行、图像行和数据透视行。我想从中提取图像集合。
图片模型:
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');
}
最终objective是从主题和风格的查询结果中合并图像集合。
您可以分别从主题和风格中获取图像集合,并将它们合并为一个集合
代码是这样的
$images = new Collection();
$images = $images->merge($subject->images);
$images= $images->merge($style->images);
Image::has('styles')->orHas('subjects')->get();
好的,这就是对我有用的方法。使用 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();
假设我有 3 张桌子。
- 图片
- 主题
- 风格
关系是多对多(Images,Subject)和多对多(Images,Style)。 现在我想做类似的事情:
$result=$subjectResult->images()->merge($styleResult->images())
。
我希望结果类型是图像集合对象。
到目前为止,我已经尝试过:
$subjectResult=Subject::with('images')->where(query)->get();
但是这个 returns 主题行、图像行和数据透视行。我想从中提取图像集合。
图片模型:
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');
}
最终objective是从主题和风格的查询结果中合并图像集合。
您可以分别从主题和风格中获取图像集合,并将它们合并为一个集合 代码是这样的
$images = new Collection();
$images = $images->merge($subject->images);
$images= $images->merge($style->images);
Image::has('styles')->orHas('subjects')->get();
好的,这就是对我有用的方法。使用 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();