Laravel eloquent whereでカラム名が文字列扱いになってしまう場合

aテーブルのageカラムとbテーブルのageカラムのイコールのレコードを抽出したい場合
->where(‘a.age’, ‘=’, ‘b.age’)
または
->where(‘a.age’, ‘b.age’)
と書いてしまいそうだけど
これだと
where a.age = ‘b.age’  ← ‘b.age’という文字列との比較になってしまう
となり正しい動作をしてくれない。

どうすればいいのか調べると
カラム同士の比較は
->whereColumn(‘a.age’, ‘b.age’)
のようにやるらしい。
もちろん
->whereColumn(‘a.age’, ‘=’, ‘b.age’)
という書き方も出来る。

ちゃんと、Laravelのドキュメントにも書いてある。

Laravelを使いだして半年経ち
5サイト構築したけど、eloquentでカラム同士の比較って初めてなんだなぁ。

ついでにLaravelドキュメントのwhere句辺りを見てみたけど
where句のためのいろんなwhereメソッドが沢山ある。
こんなに覚えられないよ!!
しかも、フレームワークごとに使い方違うし。

絶対、生のSQLを覚える方が楽だしメリット多いと思うんだけどなぁ。

いつも言ってるけど、生のSQLの結果をmodel型で返して欲しい。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です