이렇게 하면 되지 않을까요?
class ProductController { public function listProducts(ListProductsRequest $req) { // 모델의 테이블 이름을 구합니다. // 하드코드로 직접 써도 무방합니다. $productTable = (new Product())->getTable(); $businessTable = (new Business())->getTable(); // 쿼리 빌더를 만들고, 조인되는 경우를 대비해 상품 테이블의 필드만 조회하도록 합니다. $builder = Product::query()->select("{$productTable}.*"); // business_id 를 제출했으면, 상품 테이블과 조인하고, business_id로 상품 테이블을 필터링합니다. $businessId = $req->get('business_id'); if ($businessId !== null) { $builder->join($businessTable, "{$productTable}.buisness_id", '=', "{$businessTable}.id") ->where('business_id', $businessId); } // product_name 을 제출했으면, 상품 테이블을 필터링합니다. $productName = $req->get('product_name'); if (mb_strlen($productName) > 0) { $builder->where('product_name', 'like', "%{$productName}%"); } // 날짜는 Request에서 유효성 검사를 하면 좋습니다. // Carbon 으로 제출일의 00:00:00 으로 고친후 사용했는데, 날짜 형식이 틀렸다면 예외가 발생할 수 있습니다. $salesStartDate = $req->get('sales_start_date'); if ($salesStartDate !== null) { $builder->where('sales_start_date', '>=', Carbon::parse($salesStartDate)->startOfDay()); } $salesEndDate = $req->get('sales_end_date'); if ($salesEndDate !== null) { $builder->where('sales_end_date', '<', Carbon::parse($salesEndDay)->endOfDay()) } // get() 또는 paginate() 함수를 호출해서 필터링된 상품 목록을 구합니다. $builder->paginate($req->getSize(), ['*'], 'page', $req->getPage()); } }
한 아이디당 관계된 쇼핑몰이 다수입니다
전체 판매상품을 검색하는데 조건에 맞춰 검색도 할수있습니다
선택쇼핑몰 : select tag {선택된 쇼핑몰이 없으면 전체쇼핑몰 검색}
상품이름 : input text {비어있으면 전체검색}
판매시작일 : inpu text {비어있으면 전체검색}
판매중지일 : input text {비어있으면 전체검색}
이런 검색폼을 갖고있는데요
컨트롤러에서 데이터베이스를 검색해서 ajax로 출력해주는데
laravel 검색 체이닝은 어떤식으로 해야될지 모르겠습니다
정확히 \App\Busienss::where('id'..... 이곳에서 선택쇼핑몰이 없으면 아이디에 등록된 쇼핑몰 모두 검색해야되는데
어떤식으로 검색해야되는지 감이 안잡혀서요,,,, 그리고 추후에 상품이름 판매시작일 등 값이 있으면 값을 검색하고
없으면 전체 데이터가 나오게 검색하는방법을 모르겠네요 ,,,,
정말 초보적인 문제이시겠지만 힌트좀 주시면 안될까요 ?? 아니면 다른 문건이나 사이트 정보라도 주시면 감사하겠습니다ㅠㅠㅠ