ホームページ >データベース >mysql チュートリアル >Laravel 5.2 Eloquent モデルでカスタム文字列主キーを使用するときにゼロ値を回避する方法は?

Laravel 5.2 Eloquent モデルでカスタム文字列主キーを使用するときにゼロ値を回避する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 11:06:13350ブラウズ

How to Avoid Zero Values When Using Custom String Primary Keys in Laravel 5.2 Eloquent Models?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。