7 ĐIỀU BẠN CẦN BIẾT ĐỂ TẬN DỤNG TỐI ĐA LARAVEL MODEL

Ngày đăng: Thứ Tư, 12/06/2019

Khi mới bắt đầu code với Laravel, mình cảm thấy có rất nhiều thứ có thể thực hiện tốt hơn khi sử dụng với Model.Sau một thời gian code với Laravel Model và tìm hiểu thì mình thấy một số điều thú vị mà bạn có thể sử dụng Model một cách dễ dàng.

Trong bài viết này mình sẽ cung cấp cho các bạn 7 lời khuyên mà mọi người sử dụng Laravel nên biết để tận dụng tối đa Model.

1: Cách tạo Model bằng command

Khi tạo một Model thông qua command, bạn có thể chỉ định thư mục Model sẽ được tạo. Việc của bạn cần làm là nhập tên thư mục lưu Model ở phía trước tên của Model. Điều này thực sự hữu ích khi bạn muốn lưu Model ở thư mục riêng thay vì mặc định lưu ở thư mục app

php artisan make:model Models/Product

2: Casting attributes

Thuộc tính $casts cung cấp một phương thức convert attributes thành các kiểu dữ liệu khác nhau khá tiện lợi. Thuộc tính $casts là một mảng có key là tên của attribute được cast, còn giá trị là kiểu dữ liệu bạn muốn cast. Các kiểu dữ liệu để cast được hỗ trợ bao gồm: integer, real, float, double, string, boolean, object, array, collection, date, datetime, và timestamp.

Ví dụ, hãy cast attribute is_admin được lưu trong database là integer (0 hoặc 1) thành giá trị boolean:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * The attributes that should be casted to native types.

     *

     * @var  array

     */

    protected $casts = [

        'is_admin' => 'boolean',

    ];

}

 

Bây giờ, attribute is_admin sẽ luôn luôn được cast thành boolean khi bạn truy cập nó, thậm chí nếu giá trị nó được lưu trong database là kiểu integer:

 

 

$user = App\User::find(1);

 

if ($user->is_admin) {

    //

}

 

3: Visibility

Sẽ có lúc bạn muốn giới hạn attributes như password không được hiển thị trong kết quả array hay JSON sau khi convert. Để làm được điều đó, thêm vào thuộc tính $hiddenvào trong model: Để khai báo một accessor, tạo một hàm getFooAttribute trong model với Foo là tên của cột bạn muốn truy cập sử dụng kiểu “camel”. Ở ví dụ này, chúng ta sẽ khai báo một accessor cho first_name. Accessor sẽ tự động được gọi bởi Eloquent khi lấy giá trị của first_name attribute:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * The attributes that should be hidden for arrays.

     *

     * @var  array

     */

    protected $hidden = ['password'];

}

 

Một cách khác, bạn có thể sử dụng thuộc tính visible để định nghĩa một white-list của những thuộc tính đó được bao gồm trong mảng của model và JSON representation. Tất cả các thuộc tính khác sẽ bị hidden khi model được convert thành mảng hoặc JSON:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * The attributes that should be visible in arrays.

     *

     * @var  array

     */

    protected $visible = ['first_name', 'last_name'];

}

 

Điều này hoạt động giống như các thuộc tính $fillable và $guarded

4: Accessors

Để khai báo một accessor, tạo một hàm getFooAttribute trong model với Foo là tên của cột bạn muốn truy cập sử dụng kiểu “camel”. Ở ví dụ này, chúng ta sẽ khai báo một accessor cho first_name. Accessor sẽ tự động được gọi bởi Eloquent khi lấy giá trị củafirst_name attribute:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * Get the user's first name.

     *

     * @param    string  $value

     * @return  string

     */

    public function getFirstNameAttribute($value)

    {

        return ucfirst($value);

    }

}

 

Như bạn thấy, giá trị gốc của column được truyền vào accessor, cho phép bạn thay đổi và trả về giá trị. Để lấy gía trị này, chỉ cần truyền vào tên attribute là first_name trong model instance:

 

 

$user = App\User::find(1);

 

$firstName = $user->first_name;

 

5: Mutator

Để khai báo một mutator, khai báo một hàm setFooAttribute trong model Foo là tên của cột theo “studly”. Vì vậy, lần nữa, định nghĩa một mutator cho thuộc tính first_name. Mutator sẽ được tự động gọi khi chúng ta set giá trị của thuộc tính first_name trong model:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * Set the user's first name.

     *

     * @param    string  $value

     * @return  void

     */

    public function setFirstNameAttribute($value)

    {

        $this->attributes['first_name'] = strtolower($value);

    }

}

 

Mutator sẽ nhận giá trị được gán vào, cho phép bạn thay đổi tuỳ ý trong thuộc tính $attributes của Eloquent model. Ví dụ, chúng ta có thể gán giá trị thuộc tính first_namecho Sally:

 

 

$user = App\User::find(1);

 

$user->first_name = 'Sally';

 

6: Appending values

Thỉnh thoảng, khi casting models thành array hoặc JSON, bạn cũng có thể thêm vào thuộc tính mà không có trường lưu trong database. Để làm thế, đầu tiện cần phải khai báo một accessor:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * Get the administrator flag for the user.

     *

     * @return  bool

     */

    public function getIsAdminAttribute()

    {

        return $this->attributes['admin'] == 'yes';

    }

}

 

Khi đã tạo được accessor, thêm vào tên của attribute vào thuộc tính appends trong model. Chú ý là tên của attribute là theo kiểu “snake case”, mặc dù accessor được xác định bằng kiểu “camel case”:

 

 

<?php

 

namespace App;

 

use Illuminate\Database\Eloquent\Model;

 

class User extends Model

{

    /**

     * The accessors to append to the model's array form.

     *

     * @var  array

     */

    protected $appends = ['is_admin'];

}

 

Khi mà attribute được thêm vào trong danh sách appends, nó sẽ được thêm vào khi convert thành thành array hay JSON. Attribute trong mảng appends cũng sẽ tuần tự theo cấu hình visible và hidden trong model.

7: Touches

Khi một Model có quan hệ beLongsTo hoặc beLongsToMany với một Model khác, ví dụ một Comment thuộc về một Blog, trường hợp này rất hữu ích khi cập nhật timestapcủa cha khi con được cập nhật.Điều này có thể thực hiện bằng cách thêm vào mối quan hệ thuộc tính $touches:

 

 

class Comment extends Model

{

    protected $touches = ['blog'];

 

    public function blog()

    {

        return $this->belongsTo(App\Blog::class);

    }

}

 

Khi Model Comment được cập nhật thì sẽ tự động cập nhật thuộc tính update_at của Blog

Tổng kết

Trên đây là 7 điều mà mình muốn chia sẻ với các bạn để tận dụng tối đa khi làm việc với Model

Nguồn tham khảo

Medium

Laravel Mutators

Laravel Serialization

 

Techtalk

CÁC TIN TỨC, SỰ KIỆN KHÁC


19 BÍ KÍP BẠN CÓ THỂ DÙNG KHI PHẠM SAI LẦM VỚI GIT
19 Bí Kíp Bạn Có Thể Dùng Khi Phạm Sai Lầm Với Git
Thứ Năm, 20/06/2019 bởi Nguồn: Nguyen Anh Tien\viblo.asia

19 Bí Kíp Bạn Có Thể Dùng Khi Phạm Sai Lầm Với Git


NGÀNH CÔNG NGHỆ THÔNG TIN CÓ PHẢI LÀ LỰA CHỌN NGHỀ NGHIỆP TỐT?
Ngành Công nghệ Thông tin có phải là lựa chọn nghề nghiệp tốt?
Thứ Tư, 19/06/2019 bởi Aptech

Với sự phát triển như vũ bão của Công nghệ thông tin, ngày nay các bạn trẻ đứng trước lựa chọn ngành, nghề cũng có thể tự tìm kiếm thông tin và tham khảo từ nhiều nguồn khác nhau. Nếu bạn lựa chọn học CNTT, chắc hẳn bạn đã nắm chắc các thông tin phía sau?


'HỌC ĐẠI HỌC PHẢI TRẢ GIÁ CẢ VỀ TÀI CHÍNH VÀ THỜI GIAN'
'Học đại học phải trả giá cả về tài chính và thời gian'
Thứ Hai, 17/06/2019 bởi Bachkhoa-Aptech

Cái đích cuối cùng của việc học là để có công việc tốt, để đáp ứng được doanh nghiệp tuyển dụng. Nhưng, 3 năm học đại học, gần như không áp dụng được gì cho công việc hiện tại, đó là cái giá mình phải trả vì đã ‘đua’ theo bạn bè vào học đại học cho oai.


7 ĐIỀU BẠN CẦN BIẾT ĐỂ TẬN DỤNG TỐI ĐA LARAVEL MODEL
7 điều bạn cần biết để tận dụng tối đa Laravel Model
Thứ Tư, 12/06/2019 bởi Techtalk

Khi mới bắt đầu code với Laravel, mình cảm thấy có rất nhiều thứ có thể thực hiện tốt hơn khi sử dụng với Model.Sau một thời gian code với Laravel Model và tìm hiểu thì mình thấy một số điều thú vị mà bạn có thể sử dụng Model một cách dễ dàng.


TRIỂN VỌNG NGHỀ NGHIỆP CỦA LẬP TRÌNH VIÊN TRONG KỶ NGUYÊN 4.0
Triển vọng nghề nghiệp của Lập trình viên trong kỷ nguyên 4.0
Thứ Tư, 12/06/2019 bởi Bachkhoa-Aptech

Bạn đang là học sinh THPT, hay là sinh viên các trường đại học - cao đẳng - trung cấp. Bạn yêu thích máy tính, công nghệ, hoặc muốn theo đuổi sự nghiệp Lập trình.


SO SÁNH PYTHON VÀ CÁC NGÔN NGỮ LẬP TRÌNH KHÁC
So sánh Python và các ngôn ngữ lập trình khác
Thứ Hai, 10/06/2019 bởi Sưu tầm

Là một người mới học lập trình, bạn nên chọn một ngôn ngữ dễ học. Với Python, bạn dễ dàng trình bày ý tưởng của mình vào các đoạn mã.

XEM THÊM


KẾT NỐI VỚI CHÚNG TÔI