12/08/2018, 14:15

Một số điểm mới về Migration và Eloquent trong Laravel 5.3

Thay đổi của Eloquent Query Builder trả về một Collection. Trong Laravel 5.2, Query Builder trả về dữ liệu dưới dạng mảng mà mỗi phần tử là một thể hiên của đối tượng stdClass. Điều này đã được thay đổi trong Laravel 5.3, thay vì trả về array, Query Builder bây giờ sẽ trả collection. Đây ...

Thay đổi của Eloquent

  • Query Builder trả về một Collection.

    Trong Laravel 5.2, Query Builder trả về dữ liệu dưới dạng mảng mà mỗi phần tử là một thể hiên của đối tượng stdClass.

    Điều này đã được thay đổi trong Laravel 5.3, thay vì trả về array, Query Builder bây giờ sẽ trả collection.

    Đây là thay đổi mà mình thấy thực sự tốt vì bạn không cần thực hiện bước chuyển đổi mảng thành collection. Làm việc với collection sẽ dễ dàng hơn nhiều khi làm việc với mảng.

    Cá nhân mình nghĩ rằng đây là thay đổi thực sự tốt vì bạn không cần phương pháp thu thập để chuyển đổi mảng đến một bộ sưu tập Laravel. Nó cũng cần phải nói rằng bộ sưu tập được dễ dàng hơn nhiều để làm với như trái ngược với các mảng.

  • Giới thiệu Json Column Query và phương thức update().

    Khi bạn làm việc với một database model mà trả ra dữ liệu Json, điều này đã chỉ đơn thuần là một mảng có thể được chuyển đổi qua lại định dạng Json.

    Nhưng từ phiên bản 5.3, bạn có một cách mới để truy vấn và cập nhật dữ liệu cho các thuộc tính JSON.

    Điều đó có nghĩa là gì? Hãy cùng theo dõi ví dụ sau đây: Giả sử bạn có một migration như sau:

	Schema::create('players', function (Blueprint $table) {
		$table->increments('id');
		$table->string('name');
		$table->date('dob');
		$table->string('phone_number');
		$table->string('email');
		$table->json('stats');
		$table->timestamps();
	});
Khi đó dữ liệu nhận được của bạn sẽ có dạng:
	{
	  "id": 1,
	  "name": "Nguyen Truong",
	  "dob": "1992-11-02",
	  "phone_number": "XXXXXXXXXX",
	  "email": "player@example.com",
	  "stats": {
		"goals": 20,
		"red_cards": 2,
		"yellow_cards": 3,
		"benched": false
	  }
	}
- Truy vấn với where():
		DB::table('players')
			->where('stats->goals', 20)
			->get();
- Cập nhật dữ liệu với update():
		DB::table('players')
			->where('stats->red_cars', '>', 3)
			->update(['stats->benched' => true]);
Các bạn chú ý rằng tính năng này chỉ hỗ trợ MySQL 5.7 và PostgreSQL 9.5.
  • Cho phép truyền thêm tham số cho firstOrCreate().

    Từ phiên bản 5.3, phương thức firstOrCreate() cho phép bạn truyền thêm tham số. Điều đó có nghĩa là thay vì trước đây bạn phải làm như sau:

	$user = User::firstOrNew(['email', 'abc@gmail.com']);

	if (! $user->exists) {
		$user->fill(['user_name' => 'Nguyen Truong'])->save();
	}

	return $user;
thì bây giờ bạn chỉ việc viết như sau:
    return User::firstOrCreate(
        ['user_name', 'Nguyen Truong'],
        ['email' => 'abc@gmail.com']
    );

Thay đổi của Migration

  • Chỉ định đường dẫn đến thư mục migration

    Laravel 5.3 sẽ hỗ trợ nhiều đường dẫn đến migration thông qua một service provider.

	$this->loadMigrationsFrom('path/to/your/migrations/folder')
Với điều này, việc chạy migration cũng rất đơn giản php artisan migrate.
  • Step Rollback

    Trước bản 5.3 nếu bạn muốn rollback nhiều migration thì ko có cách nào khác ngoài chạy nhiều lần lệnh rollback. Bây giờ chỉ với 1 lần chạy bạn đã có được điều mình muốn.

		php artisan migrate:rollback --step=1

0