<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ThinkPHP`5.1`版本正式發布已經有一段時間了,我會陸續給大家介紹其中的新特性。今天要給大家介紹的是一個可能很多用戶還不了解的一個特性:**JSON字段數據支持**。 >[info] 不過首先注意一點,本篇內容中描述的JSON字段數據的支持是從`V5.1.4+`版本引入的。由于包含安全更新的原因,建議確保使用`5.1.9+`版本。 >[danger] 本篇中對`JSON`字段的定義包括`JSON`類型或者保存的數據為`JSON`格式的字符類型,所以理論上除了使用`JSON`字段條件查詢外的操作對數據庫類型和版本沒有要求。 > ## `Db`類操作`JSON` 如果你沒有使用模型類,Db類提供了一個`json`方法可以指定你的數據表`JSON`格式字段,例如你的`user`表有一個`info`字段是`JSON`類型的,你可以使用下面的方式操作數據。 ### 數據寫入 ~~~ $user['name'] = 'thinkphp'; $user['info'] = [ 'email' => 'thinkphp@qq.com', 'nickname' => '流年', ]; Db::name('user') ->json(['info']) ->insert($user); ~~~ `json`方法的參數是一個數組,示例中指定了`info`字段,其實可以指定多個JSON類型字段。 ### 數據查詢 查詢整個JSON數據使用。 ~~~ $user = Db::name('user') ->json(['info']) ->find(1); dump($user); ~~~ 返回的查詢結果數據中,會自動包含一個數組類型的`info`數據,也就是說JSON格式數據已經自動`json_decode`處理。 > 該方式查詢對`info`字段并非嚴格要求使用`JSON`類型 如果需要根據JSON數據的值進行查詢,可以使用下面的方法 ~~~ $user = Db::name('user') ->json(['info']) ->where('info->nickname','ThinkPHP') ->find(); dump($user); ~~~ > 要求`info`字段必須是`JSON`類型,MySQL需要`5.7+`版本才能支持 > 當然,也可以支持多級 ~~~ $user = Db::name('user') ->json(['info']) ->where('info->profile->nickname','ThinkPHP') ->find(); dump($user); ~~~ 由于JSON字段的屬性類型并不會自動獲取,所以,如果是整型數據查詢的話,需要手動參數綁定,例如: ~~~ $user = Db::name('user') ->json(['info']) ->where('info->user_id', ':user_id') ->bind('user_id', 10, \PDO::PARAM_INT) ->find(); dump($user); ~~~ ### 數據更新 完整JSON數據更新 ~~~ $data['info'] = [ 'email' => 'kancloud@qq.com', 'nickname' => 'kancloud', ]; Db::name('user') ->json(['info']) ->where('id',1) ->update($data); ~~~ > 該方式查詢對`info`字段并非嚴格要求使用`JSON`類型 如果只是更新`JSON`數據中的某個值,則可以使用下面的方法: ~~~ $data['info->nickname'] = 'ThinkPHP'; Db::name('user') ->json(['info']) ->where('id',1) ->update($data); ~~~ > 同樣要求`info`字段必須是`JSON`類型 ## 模型操作`JSON`數據 如果你使用的是模型操作數據庫的話,那么`JSON`數據操作就更簡單了。 我們只要給`User`模型類增加一個`json`屬性定義即可。 ~~~ <?php namespace app\index\model; use think\Model; class User extends Model { // 設置json類型字段 protected $json = ['info']; } ~~~ json屬性同樣支持定義多個字段名稱,定義后,可以進行如下JSON數據操作。 ### 寫入數據 使用數組方式寫入JSON數據: ~~~ $user = new User; $user->name = 'thinkphp'; $user->info = [ 'email' => 'thinkphp@qq.com', 'nickname '=> '流年', ]; $user->save(); ~~~ 使用對象方式寫入JSON數據 ~~~ $user = new User; $user->name = 'thinkphp'; $info = new StdClass(); $info->email = 'thinkphp@qq.com'; $info->nickname = '流年'; $user->info = $info; $user->save(); ~~~ ### 查詢數據 和Db類查詢出來的結果類型不同,模型的`JSON`字段會自動轉換成對象方式。 ~~~ $user = User::get(1); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年 ~~~ 同樣也可以支持查詢`JSON`字段數據 ~~~ $user = User::where('info->nickname','流年')->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年 ~~~ 和Db類查詢一樣,如果你需要查詢的JSON屬性是整型類型的話,需要進行手動參數綁定。 ~~~ $user = User::where('info->user_id',':user_id') ->bind('user_id', 10 ,\PDO::PARAM_INT) ->find(); echo $user->name; // thinkphp echo $user->info->email; // thinkphp@qq.com echo $user->info->nickname; // 流年 ~~~ 如果你使用的是`V5.1.11+`版本的話,可以在模型類里面定義JSON字段的屬性類型,就會自動進行相應類型的參數綁定查詢。 ~~~ <?php namespace app\index\model; use think\Model; class User extends Model { // 設置json類型字段 protected $json = ['info']; // 設置JSON字段的類型 protected $jsonType = [ 'user_id' => 'int' ]; } ~~~ 沒有定義類型的屬性默認為字符串類型,因此字符串類型的屬性可以無需定義。 ### 更新數據 更新JSON數據也是采用對象的方式 ~~~ $user = User::get(1); $user->name = 'kancloud'; $user->info->email = 'kancloud@qq.com'; $user->info->nickname = 'kancloud'; $user->save(); ~~~ 如果你需要對JSON類型字段做更復雜的操作,還可以通過`exp`表達式方式完成。這個就等待大家去發現更多的JSON用法了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看