ホームページ >データベース >mysql チュートリアル >Laravel 5.2 Eloquent モデルでカスタム文字列主キーを使用するときにゼロ値を回避する方法は?
Laravel 5.2: Eloquent テーブルのカスタム主キー - ゼロ値の回避
Laravel 5.2 では、文字列をカスタム主キーとして使用します。 Eloquent テーブルでは、主キーの値がゼロ (0) になるという予期せぬ動作が発生する可能性があります。この問題に対処するには、Eloquent モデルの属性キャスト メカニズムの特定の側面を理解することが不可欠です。
デフォルトでは、Eloquent は特定の属性を適切なデータ型にキャストしようとします。自動インクリメントテーブルの場合、ID は整数とみなされます。ただし、文字列を主キーとして使用する場合、このキャストによりキーの値が 0 に誤って変換されます。
この問題を解決するには、次の 3 つの戦略を使用できます。
方法 1: インクリメントを無効にする
モデル クラスで $incrementing プロパティを false に設定すると、テーブルの主キーは自動インクリメントされません。これは、主キーに整数キャストを適用しないように Eloquent に指示します。
class UserVerification extends Model { protected $primaryKey = 'verification_token'; public $incrementing = false; }
方法 2: インクリメント キーを指定する
モデルの主キーが整数の場合自動インクリメントではない場合でも、$incrementing を false に設定することは適切ではない可能性があります。代わりに、$keyType プロパティを使用して主キーのデータ型を指定します。
class UserVerification extends Model { protected $primaryKey = 'verification_token'; protected $keyType = 'string'; }
方法 3: 主キーを明示的にキャストする
別のアプローチは、明示的にキャストすることです。主キーを Eloquent クエリ自体内の文字列にキャストします。これにより、モデルのデフォルト設定に関係なく、主キーが文字列として処理されるようになります。
UserVerification::where('verification_token', (string) $token)->first();
以上がLaravel 5.2 Eloquent モデルでカスタム文字列主キーを使用するときにゼロ値を回避する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。