Thêm phương thức truy vấn với JSON-column cho where() và update()

0

Trước đây chúng ta vẫn có thể lưu dữ liệu kiểu JSON nhưng thực tế là lưu dưới dạng text. Trong phiên bản 5.7, MySQL đã giới thiệu về kiểu dữ liệu JSON. Laravel 5.3 cung cấp cho chung ta một cú pháp đơn giản để thao tác dựa trên keys trong một cột dữ liệu JSON. Cùng tìm hiểu về sự thay đổi này qua ví dụ sau:

Chúng ta có một table contacts
...
class CreateContactsTable extends Migration
{
    public function up()
    {
        Schema::create('contacts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->json('meta'); // Kiểu dữ liệu JSON
            $table->timestamps();
        });
    }
}
Giả sử trường dữ liệu meta có dạng:
{
    "id": 1,
    "name": "Akira",
    "meta": {
        "wants_newsletter": true,
        "favorite_color": "black"
    }
}
Để tham chiếu đến thuộc tính trong trường JSON, chúng ta bắt đầu bằng tên trường với mũi tên -> tới thuộc tính cần tham chiếu.
Tìm kiếm trong cột JSON với where()
$users = DB::table('users')
    ->where('meta->favorite_color', 'black')
    ->get();
Câu lệnh này sẽ tìm kiếm user có meta chứa favorite_color là black.
Update dữ liệu cột JSON với update()
DB::table('users')
    ->where('id', 1)
    ->update(['meta->wants_newsletter' => false]);
Trường hợp meta chưa có thuộc tính wants_newsletter trước đó thì vẫn có thể update được.
Hiện tại MariaDB chưa có JSON columns, và PostgreSQL có JSON columns nhưng tính năng này dường như không hoạt động được. Nên hiện tại có thể coi đây là một tính năng cho MySQL 5.7+
Nguồn viblo.asia

Post a Comment

0Comments
Post a Comment (0)