2019-04-11 19:12:24 317次浏览 2条回答 0 悬赏 100 金钱

声明:yii/db/ActiveQueryyii/db/Query 的子类

yii/db/ActiveQuery.php 有一句:

list ($sql, $params) = $db->getQueryBuilder()->build($this);
//这个->build($this);是调用下面的yii/db/QueryBuilder类,注意这里传入的是$this子类ActiveQuery对象。

yii/db/QueryBuilder.php 文件的方法

/**
* param Query $query
*/
pubic function build($query,$params[])
{
    /* 这个$query 是上面传来的ActiveQuery子类 类实例,下面有一句不懂*/
    $query = $query->prepare($this);  //问题::这里为什么要在调用一次???
}

然后调用的 yii/db/Query 类的

public function prepare($builder)
{
    return $this; //为什么上面还要调这里,这里也是返回当前Query对象啊
}
亿速云

最佳答案

  • 回答于 2019-04-12 09:51 举报

    首先我没明白哪一点子类对象改成父类对象了。你从哪里看出来的?
    你看看prepare这个方法的注释吧

    /**
         * Prepares for building SQL.
         * This method is called by [[QueryBuilder]] when it starts to build SQL from a query object.
         * You may override this method to do some final preparation work when converting a query into a SQL statement.
         * @param QueryBuilder $builder
         * @return $this a prepared query instance which will be used by [[QueryBuilder]] to build the SQL
         */
    

    这是给开发人员对查询对象$query做发挥的地方,做最后的准备工作。参数$builder默认没有用而已;

您需要登录后才可以回答。登录 | 立即注册
灰太狼
总监

灰太狼

注册时间:2016-11-19
最后登录:2小时前
在线时长:62小时50分
  • 粉丝26
  • 金钱3285
  • 威望80
  • 积分4705

热门问题