Laravelのカスタムキャスト機能により、複雑なデータ型とビジネスロジックを処理するための組み込みキャスト機能を超えて、カスタマイズされたデータ変換が可能になります。
以下は、カスタムキャストを使用して電話番号をフォーマットする方法の例です。
<?php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Database\Eloquent\Model; class PhoneNumber implements CastsAttributes { public function get(Model $model, string $key, mixed $value, array $attributes): string { return sprintf( "+%d (%d) %d-%d", ...explode('|', $value) ); } public function set(Model $model, string $key, mixed $value, array $attributes): string { $value = preg_replace('/[^0-9]/', '', $value); return implode('|', [ substr($value, 0, 1), substr($value, 1, 3), substr($value, 4, 3), substr($value, 7) ]); } }
<?php namespace App\Casts; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Database\Eloquent\Model; class Address implements CastsAttributes { public function get(Model $model, string $key, mixed $value, array $attributes): array { $data = json_decode($value, true); return [ 'street' => $data['street'], 'city' => $data['city'], 'state' => $data['state'], 'postal_code' => $data['postal_code'], 'formatted' => sprintf( '%s, %s, %s %s', $data['street'], $data['city'], $data['state'], $data['postal_code'] ) ]; } public function set(Model $model, string $key, mixed $value, array $attributes): string { return json_encode([ 'street' => $value['street'], 'city' => $value['city'], 'state' => $value['state'], 'postal_code' => $value['postal_code'] ]); } }
カスタムキャストは、モデルをシンプルでメンテナンスに保ちながら、複雑なデータ変換を処理するためのシンプルで再利用可能な方法を提供します。
class User extends Model { protected $casts = [ 'address' => Address::class, 'phone' => PhoneNumber::class ]; }
以上がLaravelキャストでデータ変換をカスタマイズしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。