thinkphp5中的has,haswhere,json講解

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: ThinkPHP 2023-09-10 我要說兩句(0)

初步討論tp框架的orm中has和haswhere的使用。

has與haswhere還有tp5.0與5.010版本的json不同

hasone

hasOne('關聯模型名','外鍵名','主鍵名',['模型別名定義'],'join類型');

他這個, 模型名沒問題, 外鍵在我們的理解應該是Member_id. 因爲本表相當於外表.而member_id理解爲主鍵表id. 所以有可能理解偏差。

public function member()
{
    return $this->hasOne('Member','id','member_id');
}
// has語法. 
$this->moneyrechargelog_model->has('member')->select();

列印語句爲子查詢. 

SELECT * FROM `qlqw_money_recharge_log` `a` WHERE  EXISTS ( SELECT `b`.`id` FROM `qlqw_member` `b` WHERE  ( `a`.`member_id` =b.id ) )

haswhere查詢方法

$this->moneyrechargelog_model->haswhere('member')->select();

列印語句

SELECT `MoneyRechargeLog`.* FROM `qlqw_money_recharge_log` `MoneyRechargeLog` INNER JOIN `qlqw_member` `Member` ON `MoneyRechargeLog`.`member_id`=`Member`.`id`

其中has爲子查詢方式, haswhere爲join方式。曾經我們做過測試, 子查詢要比join慢10倍的速度。這個地方官方沒有給出任何解釋,所以本人很少使用has進行查詢。

要麽join查詢,要麽haswhere查詢。

這裡面還有一個問題, 沒有找到has或者haswhere多個使用的方法。

擴展: 在tp5.0版本中, join查詢會按照ab別名庫. 在10版本中,會以庫名進行別名區分.這個地方如果庫名很長會很麻煩, 雖然可以alias進行別名, 但是還是覺得不方便。

ps: 在join查詢中, b標別名 比如->join('member b','a.id=b.member_id');

因爲orm問題,“member b”中間只能有一個空格, 有兩個空格就會報錯。

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    2

  • 開心

    0

  • 憤怒

    0

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評