LaravelPackages.net
Acme Inc.
Toggle sidebar
kanagama/laravel-eloquent-method-expansion

Eloquent メソッド拡張

39
1
v1.3.0
About kanagama/laravel-eloquent-method-expansion

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

Eloquent Method Expansion

testbench公式ドキュメント

機能概要

php7.4 以上 Laraevel8.0 以上

Eloquent を拡張し、メソッドを追加します。

(※正確には拡張しているのは QueryBuilder なのですが、リポジトリ名を先に決めてしまっていたので…)

packagist

https://packagist.org/packages/kanagama/laravel-eloquent-method-expansion

使い方

composer でインストール

composer require kanagama/laravel-eloquent-method-expansion

インストール後、下記メソッドが使えるようになります。


拡張 where 句

[columnName] にはテーブルのカラム名をアッパーキャメルで入力します。

where[columnName]IsNull(), orWhere[columnName]IsNull()

where[columnName]IsNull() メソッドは、columnName が NULL である条件を加えます。

$users = DB::table('users')
            ->whereNameIsNull()
            ->get();
# select * from users where name IS NULL;

where[columnName]IsNotNull(), orWhere[columnName]IsNotNull()

where[columnName]IsNull() メソッドは、columnName が NULL でない条件を加えます。

$users = DB::table('users')
            ->whereNameIsNotNull()
            ->get();
# select * from users where name IS NOT NULL;

where[columnName]Eq(), orWhere[columnName]Eq()

AllowEmpty オプション対応

where[columnName]Eq() メソッドは、 パラメータの値が columnName の値と一致する条件を加えます。

$users = DB::table('users')
            ->whereTelEq('09099999999')
            ->get();
# select * from users where tel = '09099999999';

where[columnName]NotEq(), orWhere[columnName]NotEq()

AllowEmpty オプション対応

where[columnName]NotEq() メソッドは、 パラメータの値が columnName の値と一致しない条件を加えます。

$users = DB::table('users')
            ->whereTelNotEq('09099999999')
            ->get();
# select * from users where tel <> '09099999999';

where[columnName]Gt(), orWhere[columnName]Gt()

AllowEmpty オプション対応

where[columnName]Gt() メソッドは、パラメータの値より大きい columnName の値となる条件を加えます。

$users = DB::table('users')
            ->whereCreatedAtGt('1980-05-21')
            ->get();
# select * from users where created_at > '1980-05-21';

where[columnName]Gte(), orWhere[columnName]Gte()

AllowEmpty オプション対応

where[columnName]Gte() メソッドは、パラメータの値以上の columnName の値となる条件を加えます。

$users = DB::table('users')
            ->whereCreatedAtGte('1980-05-21')
            ->get();
# select * from users where created_at >= '1980-05-21';

where[columnName]Lt(), orWhere[columnName]Lt()

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';

where[columnName]Lte(), orWhere[columnName]Lte()

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';

where[columnName]In(), orWhere[columnName]In()

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);

where[columnName]NotIn(), orWhere[columnName]NotIn()

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);

where[columnName]Like(), orWhere[columnName]Like()

AllowEmpty オプション対応

where[columnName]Like メソッドは、columName の値の中にパラメータの値が部分一致する条件を加えます。

$users = DB::table('users')
            ->whereAddressLike('沖縄県')
            ->get();
# select * from users where address like '%沖縄県%';

where[columnName]NotLike(), orWhere[columnName]NotLike()

AllowEmpty オプション対応

where[columnName]NotLike() メソッドは、columName の値の中にパラメータの値が部分一致しない条件を加えます。

$users = DB::table('users')
            ->whereAddressNotLike('沖縄県')
            ->get();
# select * from users where address not like '%沖縄県%';

where[columnName]LikePrefix(), orWhere[columnName]LikePrefix()

AllowEmpty オプション対応

where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が前方一致する条件を加えます。

$users = DB::table('users')
            ->whereAddressLikePrefix('沖縄県')
            ->get();
# select * from users where address like '沖縄県%';

where[columnName]NotLikePrefix(), orWhere[columnName]NotLikePrefix()

AllowEmpty オプション対応

where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が前方一致しない条件を加えます。

$users = DB::table('users')
            ->whereAddressNotLikePrefix('沖縄県')
            ->get();
# select * from users where address not like '沖縄県%';

where[columnName]LikeBackword(), orWhere[columnName]Backword()

AllowEmpty オプション対応

where[columnName]LikePrefix() メソッドは、columName の値の中にパラメータの値が後方一致する条件を加えます。

$users = DB::table('users')
            ->whereAddressLikeBackword('沖縄県')
            ->get();
# select * from users where address like '%沖縄県';

where[columnName]NotLikeBackword(), orWhere[columnName]NotBackword()

AllowEmpty オプション対応

where[columnName]LikePrefix メソッドは、columName の値の中にパラメータの値が後方一致しない条件を加えます。

$users = DB::table('users')
            ->whereAddressNotLikeBackword('沖縄県')
            ->get();
# select * from users where address not like '%沖縄県';

where[columnName]Date(), orWhere[columnName]Date()

AllowEmpty オプション対応

where[columnName]Date() メソッドは、columName の値と日付を比較します。

$users = DB::table('users')
            ->whereRentDatetimeDate('2022-12-02')
            ->get();
# select * from `products` where date(`rent_datetime`) = "2022-12-02"

where[columnName]DateGt(), orWhere[columnName]DateGt()

AllowEmpty オプション対応

where[columnName]DateGt メソッドは、columName の値と日付を > で比較します。

$users = DB::table('users')
            ->whereRentDatetimeDateGt('2022-12-02')
            ->get();
# select * from `products` where date(`rent_datetime`) > "2022-12-12"

where[columnName]DateGte(), orWhere[columnName]DateGte()

AllowEmpty オプション対応

where[columnName]DateGte() メソッドは、columName の値と日付を >= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeDateGte('2022-12-02')
            ->get();
# select * from `products` where date(`rent_datetime`) >= "2022-12-12"

where[columnName]DateLt(), orWhere[columnName]DateLt()

AllowEmpty オプション対応

where[columnName]DateLt() メソッドは、columName の値と日付を < で比較します。

$users = DB::table('users')
            ->whereRentDatetimeDateLt('2022-12-02')
            ->get();
# select * from `products` where date(`rent_datetime`) < "2022-12-12"

where[columnName]DateLte(), orWhere[columnName]DateLte()

AllowEmpty オプション対応

where[columnName]DateLte() メソッドは、columName の値と日付を <= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeDateLte('2022-12-02')
            ->get();
# select * from `products` where date(`rent_datetime`) <= "2022-12-12"

where[columnName]Month(), orWhere[columnName]Month()

AllowEmpty オプション対応

where[columnName]Month() メソッドは、columName の値と特定の月を比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonth('12')
            ->get();
# select * from `products` where month(`rent_datetime`) = "12"

where[columnName]MonthGt(), orWhere[columnName]MonthGt()

AllowEmpty オプション対応

where[columnName]MonthGt() メソッドは、columName の値と特定の月を > で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthGt('10')
            ->get();
# select * from `products` where month(`rent_datetime`) > "10"

where[columnName]MonthGte(), orWhere[columnName]MonthGte()

AllowEmpty オプション対応

where[columnName]MonthGte() メソッドは、columName の値と特定の月を >= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthGte('10')
            ->get();
# select * from `products` where month(`rent_datetime`) >= "10"

where[columnName]MonthLt(), orWhere[columnName]MonthLt()

AllowEmpty オプション対応

where[columnName]MonthLt() メソッドは、columName の値と特定の月を < で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthLt('10')
            ->get();
# select * from `products` where month(`rent_datetime`) < "10"

where[columnName]MonthLte(), orWhere[columnName]MonthLte()

AllowEmpty オプション対応

where[columnName]MonthLte() メソッドは、columName の値と特定の月を <= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthLte('10')
            ->get();
# select * from `products` where month(`rent_datetime`) <= "10"

where[columnName]Day(), orWhere[columnName]Day()

AllowEmpty オプション対応

where[columnName]Day() メソッドは、columName の値と特定の日を比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonth('31')
            ->get();
# select * from `products` where day(`rent_datetime`) = "31"

where[columnName]DayGt(), orWhere[columnName]DayGt()

AllowEmpty オプション対応

where[columnName]DayGt() メソッドは、columName の値と特定の日を > で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthGt('15')
            ->get();
# select * from `products` where day(`rent_datetime`) > "15"

where[columnName]DayGte(), orWhere[columnName]DayGte()

AllowEmpty オプション対応

where[columnName]DayGte() メソッドは、columName の値と特定の日を >= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthGte('15')
            ->get();
# select * from `products` where day(`rent_datetime`) >= "15"

where[columnName]DayLt(), orWhere[columnName]DayLt()

AllowEmpty オプション対応

where[columnName]DayLt() メソッドは、columName の値と特定の日を < で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthLt('15')
            ->get();
# select * from `products` where day(`rent_datetime`) < "15"

where[columnName]DayLte(), orWhere[columnName]DayLte()

AllowEmpty オプション対応

where[columnName]DayLte() メソッドは、columName の値と特定の日を <= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeMonthLte('15')
            ->get();
# select * from `products` where day(`rent_datetime`) <= "15"

where[columnName]Year(), orWhere[columnName]Year()

AllowEmpty オプション対応

where[columnName]Year() メソッドは、columName の値と特定の年を比較します。

$users = DB::table('users')
            ->whereRentDatetimeYear('2022')
            ->get();
# select * from `products` where year(`rent_datetime`) = "2022"

where[columnName]YearGt(), orWhere[columnName]YearGt()

AllowEmpty オプション対応

where[columnName]YearGt() メソッドは、columName の値と特定の年を > で比較します。

$users = DB::table('users')
            ->whereRentDatetimeYearGt('2022')
            ->get();
# select * from `products` where year(`rent_datetime`) > "2022"

where[columnName]YearGte(), orWhere[columnName]YearGte()

AllowEmpty オプション対応

where[columnName]YearGte() メソッドは、columName の値と特定の年を >= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeYearGte('2022')
            ->get();
# select * from `products` where year(`rent_datetime`) >= "2022"

where[columnName]YearLt(), orWhere[columnName]YearLt()

AllowEmpty オプション対応

where[columnName]YearLt() メソッドは、columName の値と特定の年を < で比較します。

$users = DB::table('users')
            ->whereRentDatetimeYearLt('2022')
            ->get();
# select * from `products` where year(`rent_datetime`) < "2022"

where[columnName]YearLte(), orWhere[columnName]YearLte()

AllowEmpty オプション対応

where[columnName]YearLte() メソッドは、columName の値と特定の年を <= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeYearLte('2022')
            ->get();
# select * from `products` where year(`rent_datetime`) <= "2022"

where[columnName]Time(), orWhere[columnName]Time()

AllowEmpty オプション対応

where[columnName]Time() メソッドは、columName の値と特定の時間を比較します。

$users = DB::table('users')
            ->whereRentDatetimeTime('12:00:00')
            ->get();
# select * from `products` where time(`rent_datetime`) = "12:00:00"

where[columnName]TimeGt(), orWhere[columnName]TimeGt()

AllowEmpty オプション対応

where[columnName]TimeGt() メソッドは、columName の値と特定の時間を > で比較します。

$users = DB::table('users')
            ->whereRentDatetimeTimeGt('12:00:00')
            ->get();
# select * from `products` where time(`rent_datetime`) > "12:00:00"

where[columnName]TimeGte(), orWhere[columnName]TimeGte()

AllowEmpty オプション対応

where[columnName]TimeGte() メソッドは、columName の値と特定の時間を >= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeTimeGte('12:00:00')
            ->get();
# select * from `products` where time(`rent_datetime`) >= "12:00:00"

where[columnName]TimeLt(), orWhere[columnName]TimeLt()

AllowEmpty オプション対応

where[columnName]TimeLt() メソッドは、columName の値と特定の時間を < で比較します。

$users = DB::table('users')
            ->whereRentDatetimeTimeLt('12:00:00')
            ->get();
# select * from `products` where time(`rent_datetime`) < "12:00:00"

where[columnName]TimeLte(), orWhere[columnName]TimeLte()

AllowEmpty オプション対応

where[columnName]TimeLte() メソッドは、columName の値と特定の時間を <= で比較します。

$users = DB::table('users')
            ->whereRentDatetimeTimeLte('12:00:00')
            ->get();
# select * from `products` where time(`rent_datetime`) <= "12:00:00"

where[columnName]Column(), orWhere[columnName]Column()

AllowEmpty オプション対応

where[columnName]Column() メソッドは、columnName と指定したカラムの値が等しい条件を加えます。

$users = DB::table('users')
            ->whereRentDateColumn('return_date')
            ->get();
# select * from `products` where `rent_date` = `return_date`

where[columnName]ColumnGt(), orWhere[columnName]ColumnGt()

AllowEmpty オプション対応

where[columnName]ColumnGt() メソッドは、columnName が指定したカラムの値より大きい条件を加えます。

$users = DB::table('users')
            ->whereRentDateColumnGt('return_date')
            ->get();
# select * from `products` where `rent_date` > `return_date`

where[columnName]ColumnGte(), orWhere[columnName]ColumnGte()

AllowEmpty オプション対応

where[columnName]ColumnGt() メソッドは、columnName が指定したカラムの値以上となる条件を加えます。

$users = DB::table('users')
            ->whereRentDateColumnGte('return_date')
            ->get();
# select * from `products` where `rent_date` >= `return_date`

where[columnName]ColumnLt(), orWhere[columnName]ColumnLt()

AllowEmpty オプション対応

where[columnName]ColumnLt() メソッドは、columnName が指定したカラムの値より小さい条件を加えます。

$users = DB::table('users')
            ->whereRentDateColumnLt('return_date')
            ->get();
# select * from `products` where `rent_date` < `return_date`

where[columnName]ColumnLte(), orWhere[columnName]ColumnLte()

AllowEmpty オプション対応

where[columnName]ColumnLte() メソッドは、columnName が指定したカラムの値以下となる条件を加えます。

$users = DB::table('users')
            ->whereRentDateColumnLt('return_date')
            ->get();
# select * from `products` where `rent_date` <= `return_date`

where[columnName]Between(), orWhere[columnName]Between()

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'

where[columnName]NotBetween(), orWhere[columnName]NotBetween()

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

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)) {

allowEmpty の使い所

管理画面(※予約管理画面など)では、予約者名、予約日、メールアドレス、電話番号、予約ステータス、その他多岐にわたる絞り込み条件が用意されていると思いますが、それを空かどうかチェックして空でなければ絞り込み条件に追加、というのを 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();

AllowEmpty オプション利用不可

  • where[columnName]IsNull()
  • orWhere[columnName]IsNull()
  • where[columnName]Null()
  • orWhere[columnName]Null()
  • where[columnName]NotNull()
  • orWhere[columnName]NotNull()
  • where[columnName]IsNotNull()
  • orWhere[columnName]IsNotNull()

拡張 orderBy 句

orderBy[columnName]Asc()

orderBy[columnName]Asc() メソッドは、columnName の昇順で並び替えます。

$users = DB::table('users')
            ->orderByCreatedAtAsc()
            ->get();
# select * from users order by created_at asc

orderBy[columName]Desc()

orderBy[columnName]Desc() メソッドは、columnName の降順で並び替えます。

$users = DB::table('users')
            ->orderByCreatedAtDesc()
            ->get();
# select * from users order by created_at desc

orderBy[columnName]Field()

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

PHPUnit コンテナ

PHP7.4 PHP8.0 PHP8.1 PHP8.2

make test-build
make test

※コンテナ起動時にテストが実行される

Comments