2020-03-10

Laravel6.17.1のクエリビルダがなんか変

Laravel初めて触ったんだけど

$query = DB::table('hoge')
    ->where('hoge_no', [20, 30])
    ->where('status', 1);

これが

SELECT * FROM `hoge` WHERE `hoge_no` = '20' and `status` = '30'

に展開されちゃうんだけど、こういうもんなの?

ググったけどぜんぜん言及無くて困惑

これ例えばhoge_noにクエリデータを渡したとしたら、リクエスト時に

hoge_no[]=20&hoge_no[]=30

とかでアクセスするとstatusに任意の値突っ込めちゃうんだけどいいのかこれ・・・

誰かおしえてちょ。Laravel詳しい増田


追記

https://anond.hatelabo.jp/20200310171108

Whereに配列渡すな禿。配列渡すならWhereInにしろや。

いや、別にwhereに配列を渡したいわけじゃないのよ。

$query = DB::table('hoge')
    ->where('hoge_no', $request->hoge_no)
    ->where('status', 1);

例えば上記コードでstatusに意図せず任意の値埋め込まれちゃうんじゃないの?っていう話ね。

記事への反応 -
  • やりたいのは whereIn whereBetween だと思うが whereに想定外の引数を渡したときの動作がおかしいのは、初心者にも優しいはずのPHPのフレームワークでは問題かもしれない

  • Whereに配列渡すな禿。配列渡すならWhereInにしろや。

  • ORMぇ…

  • つ teratail

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん