whereHas
方法使用MySQL的EXISTS
。问题在于,当例如品牌和文字被指定时,它会带有所有带有或不带有品牌的商品,但是我需要在品牌指定的情况下只需要带有品牌和文字的商品。
$ parts = AutoPart \ Part :: has(' classifier') - > with([' details',' classifier',' order' ;,'地点']) - > orderBy(' id',' desc');
if ($brand = $request->get('brand', FALSE)) {
$parts->whereHas('details', function($query) use($brand) {
$query->where('brand', '=', $brand);
});
}
if ($model = $request->get('model', FALSE)) {
$parts->whereHas('details', function($query) use($model) {
$query->where('model', '=', $model);
});
}
if ($text = $request->get('text', FALSE)) {
if (strlen($text) > 0) {
$parts->whereHas('details', function($query) use($text) {
$query->where('notes', 'LIKE', '%' . $text . '%');
});
$parts->orWhereHas('classifier', function($query) use($text) {
$query->where('name', 'LIKE', '%' . $text . '%');
});
}
}
答案 0 :(得分:1)
将最后一个条件更改为
if ($text = $request->get('text', FALSE)) {
if (strlen($text) > 0) {
// This will put a bracket around the whereHas and the OrWherehas
$parts->where(function($q) use($text) {
$q->whereHas('details', function($query) use($text) {
$query->where('notes', 'LIKE', '%' . $text . '%');
});
$q->orWhereHas('classifier', function($query) use($text) {
$query->where('name', 'LIKE', '%' . $text . '%');
});
});
}
}
希望有所帮助