18禁黄动漫网站禁片无遮挡观看|国产在线观看免费A∨|国产偷伦在线2020

  • 
    
    1. <table id="dwhxz"><cite id="dwhxz"></cite></table>
    2. thinkphp6數據庫查詢數組批量表達式條件調整問題

      2022-07-12 10:59 欄目:技術開發 查看(5647)

      thinkphp框架的Db類支持數組批量查詢,如通過兩個字段來查詢(status和catid),我們可以這樣寫查詢語句:

      $map['status'] = 1;
      $map['catid'] = 1;
      Db::name('posts')->where($map)->select();

      最終生成的sql語句是(假設數據表前綴為jp_,下同):

      SELECT * FROM `jp_posts` WHERE `status` = 1 AND `catid`=1

      這在thinkphp5和tinkphp6中中的效果是一樣的,除了相當之外,還可以支持其他的表達式,比如查詢status=1,標題符合關鍵詞模糊查詢的數據。

      $map['status'] = 1;
      $map['title'] = ['like','%關鍵詞%'];
      Db::name('posts')->where($map)->select();

      在thinkphp5中可以得到我們預期所需要的sql語句:

      SELECT * FROM `jp_posts` WHERE `status` = 1 AND `title` LIKE '%關鍵詞%'

      但在thinkphp6中使用上述寫法最終生成的sql語句是:

      SELECT * FROM `jp_posts` WHERE? `status` = 1? AND `title` IN ('like','%關鍵詞%')

      很顯然跟我們預期所需要的sql語句是不一樣的,原因在于新的tinkphp6在進行組裝原始sql語句的時候有所調整,如果是原來其他表達式的一律當做IN子句來處理。在thinkphp6中如果需要使用其他表達式組合查詢,應該使用如下這樣的語法:

      $map[] = ['status','=',1];
      $map[] = ['title','like','%關鍵詞%']; 
      Db::name('posts')->where($map)->select();

      這樣就可以生成我們預期所需要的sql語句了:

      SELECT * FROM `jp_posts` WHERE `status` = 1 AND `title` LIKE '%關鍵詞%'

      筆者個人還是比較習慣使用上面map[key]這種形式的寫法,你覺得哪種寫法更適合呢?

      與我們的項目經理聯系
      掃二維碼與項目經理溝通

      我們在微信上24小時期待你的聲音

      解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯網交流

      轉載請注明出處:thinkphp6數據庫查詢數組批量表達式條件調整問題 - 微構網絡
      分享:
    3. 
      
      1. <table id="dwhxz"><cite id="dwhxz"></cite></table>