PHP

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.交流群: PHP+JS聊天群

相关课文
  • mac开发接入微信公众号接口返回报错 cURL error 56: SSLRead() return error -9806

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • PHP的换行符是什么

  • 由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上宾友点评