ホームページ > バックエンド開発 > PHPチュートリアル > Laravelキャストでデータ変換をカスタマイズします

Laravelキャストでデータ変換をカスタマイズします

百草
リリース: 2025-03-06 02:31:09
オリジナル
810 人が閲覧しました

Customizing Data Transformations with Laravel Casts

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート