Quay lại
Attribute casting trong Laravel Eloquent

Laravel Eloquent chắc chắn là một ORM tuyệt vời hiện đang tồn tại. Nó có một số tính năng vượt trội so với các đối thủ cạnh tranh. Một tính năng như vậy mà ORM cung cấp được gọi là “Attribute casting”.

Theo Wikipedia,

In computer science, type conversion, type casting, type coercion, and type juggling are different ways of changing an expression from one data type to another.

Nói một cách đơn giản, type casting là một phương pháp thay đổi một thực thể từ kiểu dữ liệu này sang kiểu dữ liệu khác.

Trong khi làm việc với Laravel Eloquent, có thể xảy ra trường hợp bạn muốn thay đổi kiểu dữ liệu của thuộc tính model nhất định. Trước Laravel 5, cách thông thường để đạt được việc ép kiểu trong các mô hình Eloquent là xác định một bộ truy cập cho thuộc tính nhất định. Chẳng hạn, nếu bạn muốn thay đổi kiểu dữ liệu của thuộc tính tax thành chuỗi, bạn sẽ làm như thế này.

public function getTax($value)
{
    return (string) $value;
}

Nhưng bắt đầu với Laravel 5, có một cách đơn giản hơn để làm điều tương tự. Eloquent cung cấp thuộc tính $casts trong model của bạn bằng cách sử dụng thuộc tính này để bạn có thể chuyển đổi các thuộc tính thành các loại dữ liệu phổ biến. Bạn có thể đạt được ví dụ trên như dưới đây.

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Checkout extends Model
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'tax' => 'string',
    ];
}

Bây giờ, bất cứ khi nào bạn truy cập thuộc tính tax, nó sẽ được Eloquent chuyển đổi thành một chuỗi.

$checkout = App\Checkout::find(1);

dd($checkout->tax) // string("100.85")

Như bạn có thể thấy, ở đây thuộc tính $casts là một mảng trong đó khóa là tên của thuộc tính được truyền và giá trị là kiểu dữ liệu mà bạn muốn. Các loại truyền được hỗ trợ là: integer, real, float, double, decimal: <digits>, string, boolean, object, array, collection, date, datetime, hoặc timestamp.

Array & JSON Casting

Ngoài ra, nếu bảng của bạn bao gồm một cột lưu trữ chuỗi JSON được tuần tự hóa và bạn muốn cột cụ thể đó tự động giải tuần tự hóa thuộc tính thành một mảng PHP khi bạn truy cập nó trên model Eloquent của mình, thì bạn nên sử dụng tính năng truyền mảng. Bạn có thể làm điều đó như thế này.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Admin extends Model
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'options' => 'array',
    ];
}

Sau khi truyền được xác định, bạn có thể truy cập thuộc tính options  và nó sẽ tự động được giải tuần tự hóa từ JSON thành một mảng PHP. Khi bạn đặt giá trị của thuộc tính options , mảng đã cho sẽ tự động được tuần tự hóa trở lại thành JSON để lưu trữ:

$admin = App\Admin::find(1);

$options = $admin->options;

$options['key'] = 'value';

$admin->options = $options;

$admin->save();

 

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday