5

Eloquents の find メソッドを使用してデータベースからレコードを取得しようとしていますが、予期せず null が返されます。データベースでクエリを手動で実行すると、予想されるレコードが返されます。

私はLaravelで以下を使用しています:

$support = Support::find(02155);

そして、データベース上で直接以下:

SELECT * FROM support WHERE id = 02155;

主キー列の名前は「id」で、型は smallint(5)、符号なし、ゼロフィル、自動インクリメントが設定されています。上記の「手動」クエリは、Laravel が何を実行する必要があるかに従って、Laravel ドキュメントに基づいています。

報告されたエラーはありません (確認できます)。Eloquent メソッドを「all」に変更すると、すべてのレコードが正しく返されます。

4

2 に答える 2

16

これは、次のように、0 で始まる数値が PHP によって 8 進数と見なされるために発生します

PHP は、MySQL クエリを実行する前に数値を 10 進数に変換しているようです。これは、クエリが正しくない数値で形成されていることを意味します。

例えば:

Support::find(02155);

なる:

'SELECT * FROM mytable WHERE id = 1133'

ソリューション

Eloquents find メソッドで使用する前に、 (int) を使用して数値を整数に型キャストすることでこれを解決しました。次のように、数値を文字列として (つまり、引用符で囲んで) 渡す場合にも機能します。

Support::find('02155');
于 2013-03-11T18:02:03.993 に答える