当前位置: 首页>>代码示例>>PHP>>正文


PHP Closure::select方法代码示例

本文整理汇总了PHP中Closure::select方法的典型用法代码示例。如果您正苦于以下问题:PHP Closure::select方法的具体用法?PHP Closure::select怎么用?PHP Closure::select使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Closure的用法示例。


在下文中一共展示了Closure::select方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: select

 /**
  * 查找记录
  * @access public
  * @param array|string|Query|\Closure $data
  * @return Collection|false|\PDOStatement|string
  * @throws DbException
  * @throws ModelNotFoundException
  * @throws DataNotFoundException
  */
 public function select($data = null)
 {
     if ($data instanceof Query) {
         return $data->select();
     } elseif ($data instanceof \Closure) {
         call_user_func_array($data, [&$this]);
         $data = null;
     }
     // 分析查询表达式
     $options = $this->parseExpress();
     if (false === $data) {
         // 用于子查询 不查询只返回SQL
         $options['fetch_sql'] = true;
     } elseif (!is_null($data)) {
         // 主键条件分析
         $this->parsePkWhere($data, $options);
     }
     $resultSet = false;
     if (empty($options['fetch_sql']) && !empty($options['cache'])) {
         // 判断查询缓存
         $cache = $options['cache'];
         unset($options['cache']);
         $key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options));
         $resultSet = Cache::get($key);
     }
     if (!$resultSet) {
         // 生成查询SQL
         $sql = $this->builder()->select($options);
         // 获取参数绑定
         $bind = $this->getBind();
         if ($options['fetch_sql']) {
             // 获取实际执行的SQL语句
             return $this->connection->getRealSql($sql, $bind);
         }
         // 执行查询操作
         $resultSet = $this->query($sql, $bind, $options['master'], $options['fetch_class']);
         if ($resultSet instanceof \PDOStatement) {
             // 返回PDOStatement对象
             return $resultSet;
         }
         if (isset($cache)) {
             // 缓存数据集
             if (isset($cache['tag'])) {
                 Cache::tag($cache['tag'])->set($key, $resultSet, $cache['expire']);
             } else {
                 Cache::set($key, $resultSet, $cache['expire']);
             }
         }
     }
     // 返回结果处理
     if (count($resultSet) > 0) {
         // 数据列表读取后的处理
         if (!empty($this->model)) {
             // 生成模型对象
             $model = $this->model;
             foreach ($resultSet as $key => $result) {
                 /** @var Model $result */
                 $result = new $model($result);
                 $result->isUpdate(true);
                 // 关联查询
                 if (!empty($options['relation'])) {
                     $result->relationQuery($options['relation']);
                 }
                 $resultSet[$key] = $result;
             }
             if (!empty($options['with']) && $result instanceof Model) {
                 // 预载入
                 $resultSet = $result->eagerlyResultSet($resultSet, $options['with'], is_object($resultSet) ? get_class($resultSet) : '');
             }
         }
     } elseif (!empty($options['fail'])) {
         $this->throwNotFound($options);
     }
     return $resultSet;
 }
开发者ID:Dragonbuf,项目名称:god-s_place,代码行数:84,代码来源:Query.php


注:本文中的Closure::select方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。