前提
- Laravel 9.x
- SQLServer
実現したいこと
LaravelのEloquentで複数where条件に合致するレコードのモデルオブジェクトを1件取得したい
発生している問題
下記を実行したとき、'type = 1'のwhere条件が反映されず、id = 1
の全レコードが取得されてしまいます。
PHP
1$userTableModel = UserTableModel::where('id', 1) 2 ->where('type', 1) 3 ->first();
取得対象テーブルは下記のように、idとtypeの組み合わせで一意になります。
id | type | |
---|---|---|
1 | 1 | test@test.com |
1 | 2 | null |
2 | 1 | null |
PHP
1dd($userTableModel->toSql());
でSQLを確認してみると、下記が出力されます。
SQL
1select * from [T_USER] where [T_USER].[deleted_at] is null;
※Modelに論理削除設定しているのでdeleted_at is null;
の条件が自動で入っています
エラーは何も出ていません。
調べたところ、Eloquentは複合主キーに対応していないといった旨の記事がいくつか見つかったのですが、それ以前にEloquentのfirst()でwhere条件が指定できていないのがおかしいと思っています。
何故そんなことになっているのか分からず詰まっている状況です…。
該当のソースコード
PHP
1$userTableModel = UserTableModel::where('id', 1) 2 ->where('type', 1) 3 ->first(); 4dd($userTableModel->toSql());
試したこと
下記の通りfirst()ではなくget()でCollectionを取得してみたところ、期待通りwhere条件を反映したデータが取得されました。
従って条件設定が間違っているわけでは無さそうです。
PHP
1$userTableModel = UserTableModel::where('id', 1) 2 ->where('type', 1) 3 ->get();
※今回は条件に合致するレコードのモデルオブジェクトを取得してsave()で更新したいためget()では解決できないのですが…。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/15 01:09