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:
...
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