laravel使用JSON 類型方式進行存儲


Laravel 從 5.0 版本開始就已支持 JSON 數據的轉換,但這樣做的目的只是為了方便數據處理。你的數據依然以 TEXT 類型存放在你的數據庫里。不過 MySQL 從 5.7 版本起開始支持原生 JSON 數據類型,這將為我們的開發帶來便捷, Laravel 5.3 也為基於 JSON 類型的數據查詢和更新引入了新的語法。

假設我們有一個包含 JSON 類型字段的數據表:

class CreateContactsTable extends Migration
{
    public function up()
    {
        Schema::create('contacts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->json('meta');
            $table->timestamps();
        });
    }

我們假設每個 contacts 表單都包含一些基本信息,比如聯系人姓名。但是另外的一些屬性是非常靈活的,這些屬性最好以 JSON 類型方式進行存儲 —— 就像上文的 meta 字段。

where() 語法介紹

假定某個 contects 的表單信息如下:

{
    "id": 1,
    "name": "Monkey",
    "meta": {
        "wants_newsletter": true,
        "favorite_color": "red"
    }
}

現在我們想要獲取所有 favorite_color 為 red 的用戶,我們可以這么寫:

$redLovers = DB::table('contacts')
    ->where('meta->favorite_color', 'red')
    ->get();

這段代碼將會從 contacts 表中把 meta 字段的 favorite_color 屬性值為 red 的所有數據讀取出來。

update() 語法介紹

我想將上文的 Monkey 用戶的 wants_newsletter 設置為 false,可以這樣寫:

DB::table('contacts')
    ->where('id', 1)
    ->update(['meta->wants_newsletter' => false]);

值得注意的是,在上文代碼中,即使 wants_newsletter 鍵值在此之前不存在,現在也會被創建並設置為 false。

看到它的強大之處沒?在 5.3 里我們可以基於 JSON 字段屬性進行查詢,可以更新 JSON 字段中的任一屬性而無需考慮其是否存在。

注:目前僅有 MySQL 5.7+ 數據庫支持這一特性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM