12/08/2018, 13:53

New Features in Laravel 5.3 (P1)

Lời mở đầu Laravel mới release phiên bản 5.3 , chắc nhiều anh em đã review qua và thấy nhiều cái mới và hay ho. Bài viết ngày hôm nay mình sẽ giới thiệu về 2 feature mới của laravel 5.3. Đó là : - The new $$oop variable in Laravel 5.3 - Customizing additional parameters in ...

ME6tgVZNTAmfdTb5H0GG_laravel-5-3-new-features-updates.png

Lời mở đầu

Laravel mới release phiên bản 5.3 , chắc nhiều anh em đã review qua và thấy nhiều cái mới và hay ho. Bài viết ngày hôm nay mình sẽ giới thiệu về 2 feature mới của laravel 5.3. Đó là :

- The new $$oop variable in Laravel 5.3

- Customizing additional parameters in FirstOrCreate in Laravel 5.3

- The new cache() global helper in Laravel 5.3

- New JSON-column where() and update() syntax in Laravel 5.3

Nào, giờ thì LET GO :

I : Giới thiệu về biến $loop trong laravel 5.3

1, Blade directives là gì?

  • Blade directives là 1 template dùng để render ra view bao gồm 1 chuối HTML và logic của view và logic này thường được biểu hiện ra bẳng cái directives việt hóa ra thì là các chỉ thị được bắt đầu bằng ký tự @

  • Chắc hẳn vs anh em dev chúng ta ko xa lạ gì vs các directives này, điển hình như : @if, @foreach ....

  • Và thật ra thì các directives này chỉ là cách viết đơn giản mô phỏng cách viết nguyên thủy của php như :

      @if ($a == $b) sẽ được render ra cụm php <? php if ($a == $b) {} ?>
    

2, Giới thiệu về biến $loop trong laravel 5.3

  • Trong version 5.3 này, directives @foreach nhận thêm được sức mạnh từ 1 biến $loop được cung cấp sẵn bên trong directives @foreach

  • Biến $loop là một đối tượng stdClass cung cấp thông tin về vòng lặp bạn hiện đang ở bên trong. Nào bây giờ cùng ngồi nghiên cứu một chút các thuộc tính mà nó cung cấp nào :

    • index : integer - chỉ vị trí hiện tại của item bên trong mảng dữ liệu với item đầu tiên sẽ ra kết quả là 0
    • iteration: integer - chỉ vị trí hiện tại của item bên trong mảng dữ liệu với item đầu tiên sẽ ra kết quả là 1
    • remaining: integer - chỉ số item còn lại bên trong mảng dữ liệu nếu mảng dữ liệu có 3 phần tử, item hiện tại là phần tử đầu tiên thì sẽ ra kết quả là 2
    • count: integer - Tất nhiên thuộc tính này là đếm số item có trong mảng dữ liệu
    • first: boolean - Trả về giá trị true khi item đang xét là phần tử đầu tiên của mảng dữ liệu
    • last: boolean- Trả về giá trị true khi item đang xét là phần tử cuối cùng của mảng dữ liệu
    • depth : integer - chỉ về độ sâu của item đang xét (bắt đầu tính từ 1). Nếu mảng dữ liệu của bạn là 1 mảng dữ liệu phức tạp với nhiều mảng con thì thuộc tính này sẽ khá hữu ích, bên dưới mình sẽ nêu ví dụ cụ thể để các bạn rõ ràng hơn.
    • parent : stdClass - nếu vong lặp đang xét nằm trong một vòng lặp khác thì sẽ trả vể biến $loop của mảng cha.

OK, chúng ta đã tìm hiểu xong phần này rồi, giờ demo để các bạn hiểu về 2 cái thuộc tính depth, parent nhé (vì mấy cái bên trên cũng đơn giản dễ hiểu rồi). Giờ mình có 1 mảng dữ liệu như sau :

$data = [
		'php_fr' => [
			'laravel' => ['laravel_ver3', 'laravel_ver4', 'laravel_ver5'],
			'cake' => ['cake_ver2', 'cake_ver3', 'cake_ver4']
		],
		'javascript_fr' => [
			'node' => ['v2', 'v4']
		]
	];

và mình có 1 file blade để viết các directives mình có đoạn code sau :

@foreach ($data as $input)
    {{ $loop->depth }}                                     // kết quả :  1
    @foreach ($input as $input_child)
        {{ $loop->depth }}                                 // kết quả :  2
        {{ var_dump($loop->parent) }}                      // kết quả :  biến $loop của vòng lặp 1
            @foreach ($input_child as $input_child_2)
                {{ $loop->depth }}                         // kết quả :  3
            @endforeach
    @endforeach
@endforeach

II : Chỉnh sửa tham số đầu vào của hàm firstOrCreate của Eloquent

  • Với hàm static firstOrCreate này thì tên nó đã nói lên tất cả chức năng của nó rồi, tìm kiếm kết quả đầu tiên hoặc tạo mới . Với laravel 5.3 nó đã cả thiện hàm này một cách rất hay ho ... Mình sẽ làm một phép ví dụ đơn giản để bạn hiểu được sự cải thiện của nó.

Giờ mình có 1 câu truy vấn mẫu sau:

$user = User::firstOrCreate(['name' => 'abc']);

Với câu truy vấn bên trên chúng ta sẽ tìm user đầu tiền với name là abc. Ok, ổn đấy .... thế nhưng nếu mình muốn 1 bản ghi có name là abc và email là xyz@gmail.com thì sao .... Không vấn đề gì vấn đơn giản :

$user = User::firstOrCreate(['name' => 'abc', 'email' => 'xyz@gmail.com']);

Nào thử tưởng tưởng cách khác xem, mình muốn tạo 1 user có name là abc và email là xyz@gmail.com ... tuy nhiên nều đã tồn tại 1 bản ghi có name là abc thì gọi thẳng bản ghi đó ra =)) ... quả này xử thế nào, với các version cũ hơn thì chúng ta cần viết 2 đoạn mã code để check xem có tồn tại hay không để xem tạo hay lấy             </div>
            
            <div class=

0