Server : nginx/1.20.2 System : Linux VM-4-4-centos 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/greatapp.cn/thinkphp/library/think/model/ |
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- namespace think\model; use think\db\Query; use think\Exception; use think\Model; /** * Class Relation * @package think\model * * @mixin Query */ abstract class Relation { // 父模型对象 protected $parent; /** @var Model 当前关联的模型类 */ protected $model; /** @var Query 关联模型查询对象 */ protected $query; // 关联表外键 protected $foreignKey; // 关联表主键 protected $localKey; // 基础查询 protected $baseQuery; /** * 获取关联的所属模型 * @access public * @return Model */ public function getParent() { return $this->parent; } /** * 获取当前的关联模型类 * @access public * @return string */ public function getModel() { return $this->model; } /** * 获取关联的查询对象 * @access public * @return Query */ public function getQuery() { return $this->query; } /** * 封装关联数据集 * @access public * @param array $resultSet 数据集 * @return mixed */ protected function resultSetBuild($resultSet) { return (new $this->model)->toCollection($resultSet); } protected function getQueryFields($model) { $fields = $this->query->getOptions('field'); return $this->getRelationQueryFields($fields, $model); } protected function getRelationQueryFields($fields, $model) { if ($fields) { if (is_string($fields)) { $fields = explode(',', $fields); } foreach ($fields as &$field) { if (false === strpos($field, '.')) { $field = $model . '.' . $field; } } } else { $fields = $model . '.*'; } return $fields; } /** * 执行基础查询(仅执行一次) * @access protected * @return void */ protected function baseQuery() {} public function __call($method, $args) { if ($this->query) { // 执行基础查询 $this->baseQuery(); $result = call_user_func_array([$this->query, $method], $args); if ($result instanceof Query) { return $this; } else { $this->baseQuery = false; return $result; } } else { throw new Exception('method not exists:' . __CLASS__ . '->' . $method); } } }