kanagama/laravel-eloquent-method-expansion is a Laravel package for eloquent メソッド拡張.
It currently has 1 GitHub stars and 39 downloads on Packagist (latest version v1.3.0).
Install it with composer require kanagama/laravel-eloquent-method-expansion.
Discover more Laravel packages by kanagama
or browse all Laravel packages to compare alternatives.
Last updated
php7.4 以上 Laraevel8.0 以上
Eloquent を拡張し、メソッドを追加します。
(※正確には拡張しているのは QueryBuilder なのですが、リポジトリ名を先に決めてしまっていたので…)
https://packagist.org/packages/kanagama/laravel-eloquent-method-expansion
composer でインストール
composer require kanagama/laravel-eloquent-method-expansion
インストール後、下記メソッドが使えるようになります。
※ [columnName] にはテーブルのカラム名をアッパーキャメルで入力します。
where[columnName]IsNull() メソッドは、columnName が NULL である条件を加えます。
$users = DB::table('users')
->whereNameIsNull()
->get();
# select * from users where name IS NULL;
where[columnName]IsNull() メソッドは、columnName が NULL でない条件を加えます。
$users = DB::table('users')
->whereNameIsNotNull()
->get();
# select * from users where name IS NOT NULL;
※ AllowEmpty オプション対応
where[columnName]Eq() メソッドは、 パラメータの値が columnName の値と一致する条件を加えます。
$users = DB::table('users')
->whereTelEq('09099999999')
->get();
# select * from users where tel = '09099999999';
※ AllowEmpty オプション対応
where[columnName]NotEq() メソッドは、 パラメータの値が columnName の値と一致しない条件を加えます。
$users = DB::table('users')
->whereTelNotEq('09099999999')
->get();
# select * from users where tel <> '09099999999';
※ AllowEmpty オプション対応
where[columnName]Gt() メソッドは、パラメータの値より大きい columnName の値となる条件を加えます。
$users = DB::table('users')
->whereCreatedAtGt('1980-05-21')
->get();
# select * from users where created_at > '1980-05-21';
※ AllowEmpty オプション対応
where[columnName]Gte() メソッドは、パラメータの値以上の columnName の値となる条件を加えます。
$users = DB::table('users')
->whereCreatedAtGte('1980-05-21')
->get();
# select * from users where created_at >= '1980-05-21';
※ AllowEmpty オプション対応
where[columnName]Lt() メソッドは、パラメータの値より小さい columnName の値となる条件を加えます。
$users = DB::table('users')
->whereModifiedAtLt('1980-05-21 00:00:00')
->get();
# select * from users where modified_at < '1980-05-21 00:00:00';
※ AllowEmpty オプション対応
where[columnName]Lte() メソッドは、パラメータの値以下の columnName の値となる条件を加えます。
$users = DB::table('users')
->whereModifiedAtLte('1980-05-21 00:00:00')
->get();
# select * from users where modified_at <= '1980-05-21 00:00:00';
※ AllowEmpty オプション対応
where[columnName]In() メソッドは、指定した配列内に columnName の値が含まれる条件を加えます。
$users = DB::table('users')
->whereUserStatusIdIn([
'1','2','3',
])
->get();
# select * from users where user_status_id in (1, 2, 3);
※ AllowEmpty オプション対応
where[columnName]NotIn() メソッドは、指定した配列内に columnName の値が含まれない条件を加えます。
$users = DB::table('users')
->whereUserStatusIdNotIn([
'1','2','3',
])
->get();
# select * from users where user_status_id not in (1, 2, 3);
※ AllowEmpty オプション対応
where[columnName]Like メソッドは、columName の値の中にパラメータの値が部分一致する条件を加えます。
$users = DB::table('users')
->whereAddressLike('沖縄県')
->get();
# select * from users where address like '%沖縄県%';
※ AllowEmpty オプション対応
where[columnName]NotLike() メソッドは、columName の値の中にパラメータの値が部分一致しない条件を加えます。
$users = DB::table('users')
->whereAddressNotLike('沖縄県')
->get();
# select * from users where address not like '%沖縄県%';
※ AllowEmpty オプション対応
where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が前方一致する条件を加えます。
$users = DB::table('users')
->whereAddressLikePrefix('沖縄県')
->get();
# select * from users where address like '沖縄県%';
※ AllowEmpty オプション対応
where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が前方一致しない条件を加えます。
$users = DB::table('users')
->whereAddressNotLikePrefix('沖縄県')
->get();
# select * from users where address not like '沖縄県%';
※ AllowEmpty オプション対応
where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が後方一致する条件を加えます。
$users = DB::table('users')
->whereAddressLikeBackword('沖縄県')
->get();
# select * from users where address like '%沖縄県';
※ AllowEmpty オプション対応
where[columnName]LikePrefix メソッドは、columName の値の中にパラメータの値が後方一致しない条件を加えます。
$users = DB::table('users')
->whereAddressNotLikeBackword('沖縄県')
->get();
# select * from users where address not like '%沖縄県';
※ AllowEmpty オプション対応
where[columnName]Date() メソッドは、columName の値と日付を比較します。
$users = DB::table('users')
->whereRentDatetimeDate('2022-12-02')
->get();
# select * from `products` where date(`rent_datetime`) = "2022-12-02"
※ AllowEmpty オプション対応
where[columnName]DateGt メソッドは、columName の値と日付を > で比較します。
$users = DB::table('users')
->whereRentDatetimeDateGt('2022-12-02')
->get();
# select * from `products` where date(`rent_datetime`) > "2022-12-12"
※ AllowEmpty オプション対応
where[columnName]DateGte() メソッドは、columName の値と日付を >= で比較します。
$users = DB::table('users')
->whereRentDatetimeDateGte('2022-12-02')
->get();
# select * from `products` where date(`rent_datetime`) >= "2022-12-12"
※ AllowEmpty オプション対応
where[columnName]DateLt() メソッドは、columName の値と日付を < で比較します。
$users = DB::table('users')
->whereRentDatetimeDateLt('2022-12-02')
->get();
# select * from `products` where date(`rent_datetime`) < "2022-12-12"
※ AllowEmpty オプション対応
where[columnName]DateLte() メソッドは、columName の値と日付を <= で比較します。
$users = DB::table('users')
->whereRentDatetimeDateLte('2022-12-02')
->get();
# select * from `products` where date(`rent_datetime`) <= "2022-12-12"
※ AllowEmpty オプション対応
where[columnName]Month() メソッドは、columName の値と特定の月を比較します。
$users = DB::table('users')
->whereRentDatetimeMonth('12')
->get();
# select * from `products` where month(`rent_datetime`) = "12"
※ AllowEmpty オプション対応
where[columnName]MonthGt() メソッドは、columName の値と特定の月を > で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthGt('10')
->get();
# select * from `products` where month(`rent_datetime`) > "10"
※ AllowEmpty オプション対応
where[columnName]MonthGte() メソッドは、columName の値と特定の月を >= で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthGte('10')
->get();
# select * from `products` where month(`rent_datetime`) >= "10"
※ AllowEmpty オプション対応
where[columnName]MonthLt() メソッドは、columName の値と特定の月を < で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthLt('10')
->get();
# select * from `products` where month(`rent_datetime`) < "10"
※ AllowEmpty オプション対応
where[columnName]MonthLte() メソッドは、columName の値と特定の月を <= で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthLte('10')
->get();
# select * from `products` where month(`rent_datetime`) <= "10"
※ AllowEmpty オプション対応
where[columnName]Day() メソッドは、columName の値と特定の日を比較します。
$users = DB::table('users')
->whereRentDatetimeMonth('31')
->get();
# select * from `products` where day(`rent_datetime`) = "31"
※ AllowEmpty オプション対応
where[columnName]DayGt() メソッドは、columName の値と特定の日を > で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthGt('15')
->get();
# select * from `products` where day(`rent_datetime`) > "15"
※ AllowEmpty オプション対応
where[columnName]DayGte() メソッドは、columName の値と特定の日を >= で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthGte('15')
->get();
# select * from `products` where day(`rent_datetime`) >= "15"
※ AllowEmpty オプション対応
where[columnName]DayLt() メソッドは、columName の値と特定の日を < で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthLt('15')
->get();
# select * from `products` where day(`rent_datetime`) < "15"
※ AllowEmpty オプション対応
where[columnName]DayLte() メソッドは、columName の値と特定の日を <= で比較します。
$users = DB::table('users')
->whereRentDatetimeMonthLte('15')
->get();
# select * from `products` where day(`rent_datetime`) <= "15"
※ AllowEmpty オプション対応
where[columnName]Year() メソッドは、columName の値と特定の年を比較します。
$users = DB::table('users')
->whereRentDatetimeYear('2022')
->get();
# select * from `products` where year(`rent_datetime`) = "2022"
※ AllowEmpty オプション対応
where[columnName]YearGt() メソッドは、columName の値と特定の年を > で比較します。
$users = DB::table('users')
->whereRentDatetimeYearGt('2022')
->get();
# select * from `products` where year(`rent_datetime`) > "2022"
※ AllowEmpty オプション対応
where[columnName]YearGte() メソッドは、columName の値と特定の年を >= で比較します。
$users = DB::table('users')
->whereRentDatetimeYearGte('2022')
->get();
# select * from `products` where year(`rent_datetime`) >= "2022"
※ AllowEmpty オプション対応
where[columnName]YearLt() メソッドは、columName の値と特定の年を < で比較します。
$users = DB::table('users')
->whereRentDatetimeYearLt('2022')
->get();
# select * from `products` where year(`rent_datetime`) < "2022"
※ AllowEmpty オプション対応
where[columnName]YearLte() メソッドは、columName の値と特定の年を <= で比較します。
$users = DB::table('users')
->whereRentDatetimeYearLte('2022')
->get();
# select * from `products` where year(`rent_datetime`) <= "2022"
※ AllowEmpty オプション対応
where[columnName]Time() メソッドは、columName の値と特定の時間を比較します。
$users = DB::table('users')
->whereRentDatetimeTime('12:00:00')
->get();
# select * from `products` where time(`rent_datetime`) = "12:00:00"
※ AllowEmpty オプション対応
where[columnName]TimeGt() メソッドは、columName の値と特定の時間を > で比較します。
$users = DB::table('users')
->whereRentDatetimeTimeGt('12:00:00')
->get();
# select * from `products` where time(`rent_datetime`) > "12:00:00"
※ AllowEmpty オプション対応
where[columnName]TimeGte() メソッドは、columName の値と特定の時間を >= で比較します。
$users = DB::table('users')
->whereRentDatetimeTimeGte('12:00:00')
->get();
# select * from `products` where time(`rent_datetime`) >= "12:00:00"
※ AllowEmpty オプション対応
where[columnName]TimeLt() メソッドは、columName の値と特定の時間を < で比較します。
$users = DB::table('users')
->whereRentDatetimeTimeLt('12:00:00')
->get();
# select * from `products` where time(`rent_datetime`) < "12:00:00"
※ AllowEmpty オプション対応
where[columnName]TimeLte() メソッドは、columName の値と特定の時間を <= で比較します。
$users = DB::table('users')
->whereRentDatetimeTimeLte('12:00:00')
->get();
# select * from `products` where time(`rent_datetime`) <= "12:00:00"
※ AllowEmpty オプション対応
where[columnName]Column() メソッドは、columnName と指定したカラムの値が等しい条件を加えます。
$users = DB::table('users')
->whereRentDateColumn('return_date')
->get();
# select * from `products` where `rent_date` = `return_date`
※ AllowEmpty オプション対応
where[columnName]ColumnGt() メソッドは、columnName が指定したカラムの値より大きい条件を加えます。
$users = DB::table('users')
->whereRentDateColumnGt('return_date')
->get();
# select * from `products` where `rent_date` > `return_date`
※ AllowEmpty オプション対応
where[columnName]ColumnGt() メソッドは、columnName が指定したカラムの値以上となる条件を加えます。
$users = DB::table('users')
->whereRentDateColumnGte('return_date')
->get();
# select * from `products` where `rent_date` >= `return_date`
※ AllowEmpty オプション対応
where[columnName]ColumnLt() メソッドは、columnName が指定したカラムの値より小さい条件を加えます。
$users = DB::table('users')
->whereRentDateColumnLt('return_date')
->get();
# select * from `products` where `rent_date` < `return_date`
※ AllowEmpty オプション対応
where[columnName]ColumnLte() メソッドは、columnName が指定したカラムの値以下となる条件を加えます。
$users = DB::table('users')
->whereRentDateColumnLt('return_date')
->get();
# select * from `products` where `rent_date` <= `return_date`
※ AllowEmpty オプション対応
where[columnName]Between() メソッドは、columnName の値が2つの値の間にある条件を加えます
$users = DB::table('users')
->whereCreatedAtBetween(['2022-12-01', '2022-12-10',])
->get();
# select * from users where created_at between '2022-12-01' AND '2022-12-10'
※ AllowEmpty オプション対応
where[columnName]NotBetween() メソッドは、columnName の値が2つの値の間にない条件を加えます
$users = DB::table('users')
->whereCreatedAtNotBetween(['2022-12-01', '2022-12-10',])
->get();
# select * from users where created_at not between '2022-12-01' AND '2022-12-10'
allowEmptyオプション
where の後に AllowEmpty オプションを付与すると、パラメータが null や [] や 文字列の '' となる場合にその条件を省略します。
# $rentDatetime = null;
# $returnDatetime = '1980-05-21 00:00:00'
$users = DB::table('users')
->whereAllowEmptyRentDatetimeGte($rentDatetime)
->whereAllowEmptyReturnDatetimeGte($returnDatetime)
->get();
# null のため、whereAllowEmptyRentDatetimeGte() は省略される
# select * from users where return_datetime >= '1980-05-21 00:00:00';
AllowEmpty チェックしている条件は下記の通りです
# 渡されたパラメータがこの条件を満たさない場合、その条件は省略されます
# int の 0 と string の '0" は省略させたくなかったので、この条件にしています
if (!empty($parameters) || is_numeric($parameter)) {
管理画面(※予約管理画面など)では、予約者名、予約日、メールアドレス、電話番号、予約ステータス、その他多岐にわたる絞り込み条件が用意されていると思いますが、それを空かどうかチェックして空でなければ絞り込み条件に追加、というのを Eloquent で書くのは意外と労力が掛かります。
$query = DB::table('reservations');
# 絞り込み条件がリクエストパラメータに存在しているかチェックして where に追加しないといけない
if ($request->reserve_name) {
$query->where('reservations.name', 'LIKE', '%'. $request->reserve_name . '%');
}
if ($request->reserve_date) {
$query->whereDate('reservations.reserve_date_at', $request->reserve_date);
}
if ($request->email) {
$query->whereEmail($request->email);
}
if ($request->tel) {
$query->whereTel($request->tel);
}
if ($request->status) {
$query->whereStatus($request->status);
}
// 絞り込み条件の数だけ続く
全部 if 文で囲むとかそんなんやってらんないよ、と思った際に使うのが AllowEmpty オプションです。
null や [] が渡された場合、その絞り込み条件を省略しますので、メソッドチェーンで全て繋げることが可能です。
return DB::table('reservations')
->whereAllowEmptyNameLike($request->reserve_name)
->whereAllowEmptyReserveDateAtDate($request->reserve_date)
->whereAllowEmptyEmailEq($request->email)
->whereAllowEmptyTelEq($request->tel)
->whereAllowEmptyStatusEq($request->status)
->get();
orderBy[columnName]Asc() メソッドは、columnName の昇順で並び替えます。
$users = DB::table('users')
->orderByCreatedAtAsc()
->get();
# select * from users order by created_at asc
orderBy[columnName]Desc() メソッドは、columnName の降順で並び替えます。
$users = DB::table('users')
->orderByCreatedAtDesc()
->get();
# select * from users order by created_at desc
orderBy[columnName]Field() メソッドは、columnName の指定した順番で並び替えます。 null を末尾に配置するため、Desc が付与されます
$users = DB::table('users')
->orderByIdField([2, 1, 4, 3,])
->get();
# select * from users order by FIELD(id, 3, 4, 1, 2) DESC;
make deelopment-build
make development
make test-build
make test
※コンテナ起動時にテストが実行される