Сначала передайте запрос переменной и обновите переменную запроса.
$query = DB::table('product as p')
->join('master as cl', 'p.color', '=', 'cl.name')
->join('master as brand', 'p.brand', '=', 'brand.name')
->where('p.brand', $brandname)
->whereRaw("p.del_flag = 0 and cl.is_active = 1 and brand.is_active = 1 and p.product_type = 1")
->select('p.name')
->groupBy('p.name')
->orderBy('p.name')
->take(3);
if( isset($_POST['brand'])) {
$query->where('p.brand', $_POST['brand'])
}
if (isset($_POST['color'])) {
$query->where('p.color', $_POST['color'])
}
if (isset($_POST['product_type'])) {
$query->where('p.product_type', $_POST['product_type'])
}
$result = $query->get();
Обновление: Как упоминал @Amol Rokade, вы также можете использовать функцию when()
:
$result = DB::table('product as p')
->join('master as cl', 'p.color', '=', 'cl.name')
->join('master as brand', 'p.brand', '=', 'brand.name')
->where('p.brand', $brandname)
->whereRaw("p.del_flag = 0 and cl.is_active = 1 and brand.is_active = 1 and p.product_type = 1")
->when(isset($_POST['brand']), function ($query) {
$query->where('p.brand', $_POST['brand']);
})
->when(isset($_POST['color']), function ($query) {
$query->where('p.color', $_POST['color']);
})
->when(isset($_POST['product_type']), function ($query) {
$query->where('p.product_type', $_POST['product_type']);
})
->select('p.name')
->groupBy('p.name')
->orderBy('p.name')
->take(3)
->get();