ホームページ > バックエンド開発 > PHPチュートリアル > Eloquent はキャストを使用してデータを処理します

Eloquent はキャストを使用してデータを処理します

WBOY
リリース: 2016-06-20 12:39:35
オリジナル
1333 人が閲覧しました

#概要

json を使用してデータを保存したい場合は、$casts を使用することが最良の選択であることがよくありますが、それだけでなく、もっと。

基本

こちらが公式ドキュメントのリンクです

RryTip によるキャストに関するビデオもあります。キャストを使用して datetype を変更してください

深めてください

次に、このデータ関係をさらに処理してみましょう。

これはユーザー画像 (アバター) の例です。アップロードされた元の画像 (オリジナル) と処理されたサムネイルを保存する必要があります。これは自然に 1 対 1 の関係モデルとして考えることができます。アバタークラスがあります。

デモ

簡単にするために、create_users_table

$table->increments('id');$table->string('name');$table->json('avatar')->nullable();$table->timestamps();
ログイン後にコピー

を変更してから、User.php に移動して定義します

protected $fillable = [    'name', 'avatar'];protected $casts = [    'avatar' => 'json'];
ログイン後にコピー

今すぐこれは単純に定義されています。後者はまだ入力していませんが、まずテストしてみましょう。routes.php

Route::get('/', function() {    User::create([        'name' => 'RryLee',        'avatar' => [            'original' => 'original-avatar.jpg',            'thumbnail' => 'original-avatar.thumbnail.jpg',        ]    ]);});Route::get('/get', function() {    $user = User::findOrFail(1);    return $user;});
ログイン後にコピー

見る必要はありません。データは確実に保存および取得できます。

ここで質問があります

これをどのように変更しますか (これは、変更を説明するために、ユーザーが元の画像を再トリミングしたことを前提としています)。本当に Avatar クラスを導入する必要があります。

<?phpnamespace App;use App\User;use Exception;class Avatar{    protected $user;    protected static $allowed = [        'original', 'thumbnail'    ];    protected $avatar = [];    public function __construct($avatar, User $user)    {        $this->avatar = $avatar;        $this->user = $user;    }    public function get($key)    {        return array_get($this->avatar, $key);    }    public function set($key, $value)    {        $this->avatar[$key] = $value;        return $this->persist();    }    public function has($key)    {        return array_key_exists($key, $this->avatar);    }    public function all()    {        return $this->avatar;    }    public function merge(array $attributes)    {        $this->avatar = array_merge(            $this->avatar,            array_only($attributes, static::$allowed)        );        return $this->persist();    }    protected function persist()    {        return $this->user->update([            'avatar' => $this->avatar        ]);    }    public function __get($key)    {        if ($this->has($key)) {            return $this->get($key);        }        throw new Exception("The {$key} avatar not exists.");    }}
ログイン後にコピー

ここでは、コードの一部を直接取得しました。persist() に注意してください。

それを User に追加します。これで、アバターを自由に操作できるようになります。

public function avatar()    {    return new Avatar(isset($this->avatar) ? $this->avatar : [], $this);}
ログイン後にコピー

データベースの値が変更されます。

Route::get('save', function() {    $user = User::findOrFail(1);    $avatar = $user->avatar();    $avatar->set('original', 'change.jpg');    return 'Done!';});
ログイン後にコピー
概要

Eloquent は効率、シンプルさ、変更を本当に改善します。

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