"月"のパラメーターと "年"のパラメーターを受け取ることができるメソッドがあります。両方またはのみを受け取ることができます。それらの中の一つ。
月のみを受け取るの場合、というフィールドで検索するクエリを作成したい」 created_at "そのフィールドの日付の月を探しているだけです
現時点ではこのコードを使用していますが、同じように実行すると正しく実行されません
else if ($request->has('month')) {
$month = $request->input('month');
$currentTimestamp = date_create_from_format('n', $month)->getTimestamp();
$currentDate = date('m', $currentTimestamp);
$filters['updated_at'] = $currentDate;
unset($filters['month']);
}
$cars = Car::where(function($query) use($filters) {
foreach ($filters as $column => $value) {
if ($column === 'updated_at') {
$query->where($column, 'LIKE', '%'.$value.'%');
continue;
}
$query->where($column, 'LIKE', '%'.$value.'%');
}
})->orderBy('updated_at', 'desc')->get();
これを試してみてください:
if ($request->has('month')) {
$month = $request->input('month');
Car::whereRaw('MONTH(created_at) = '.$month)->get();
}
次のように whereMonth メソッドを使用できます。
$cars = Car::whereMonth('created_at', '12')->get();
月の値が存在するかどうかを判断する例:
if ($request->has('month')) {
$cars = Car::whereMonth('created_at', $request->input('month'))->get();
}
laravel queryBuilderを使用できます。
アイデアは非常に単純です。クエリを作成し、必要な場合にのみ実行します
carQuery = Car::newQuery();
if ($request->has('month') {
carQuery->where('created_at' .. do camparison you want);
}
if ( $request->has('year') {
// add extra query filter
}
cars = carQuery->get();