| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- <?php
- /**
- * 描述.
- *
- * @author jim <jim458734573@gmail.com>
- * @date 2019-12-12 16:49:14
- */
- declare(strict_types=1);
- namespace App\Model;
- use Hyperf\Contract\LengthAwarePaginatorInterface;
- use Hyperf\Database\ConnectionInterface;
- use Hyperf\Database\Model\Model;
- use Hyperf\Database\Model\SoftDeletes;
- use Hyperf\ModelCache\Cacheable;
- use Hyperf\ModelCache\CacheableInterface;
- use Hyperf\DbConnection\Model\Model as HyperfBaseModel;
- use Hyperf\Database\Model\Builder as HyperfModelBuilder;
- use Hyperf\Database\Model\Collection as HyperfModelCollection;
- use Hyperf\Utils\Collection;
- use Psr\EventDispatcher\EventDispatcherInterface;
- /**
- * Class BaseModel
- *
- * @method HyperfModelBuilder whereKey($id)
- * @method HyperfModelBuilder whereKeyNot($id)
- * @method HyperfModelBuilder where($column, $operator = null, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder whereIn($column, $values, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder whereNotIn($column, $values, $boolean = 'and')
- * @method HyperfModelBuilder orWhere($column, $operator = null, $value = null, $boolean = 'and')
- * @method bool exists()
- * @method HyperfModelBuilder latest($column = null)
- * @method HyperfModelBuilder oldest($column = null)
- * @method HyperfModelCollection hydrate(array $items)
- * @method HyperfModelCollection fromQuery($query, $bindings = [])
- * @method HyperfBaseModel find($id, $columns = ['*'])
- * @method HyperfModelCollection findMany($ids, $columns = ['*'])
- * @method HyperfBaseModel findOrFail($ids, $columns = ['*'])
- * @method HyperfBaseModel findOrNew($id, $columns = ['*'])
- * @method HyperfBaseModel firstOrNew(array $attributes, array $values = [])
- * @method HyperfBaseModel firstOrCreate(array $attributes, array $values = [])
- * @method HyperfBaseModel updateOrCreate(array $attributes, array $values = [])
- * @method HyperfBaseModel firstOrFail($columns = ['*'])
- * @method HyperfBaseModel firstOr($columns = ['*'], Closure $callback = null)
- * @method string value($column)
- * @method Collection get($columns = ['*'])
- * @method HyperfBaseModel getModels($columns = ['*'])
- * @method array eagerLoadRelations(array $models)
- * @method \Hyperf\Database\Model\Relations\Relation getRelation($name)
- * @method \Generator cursor()
- * @method bool chunkById($count, callable $callback, $column = null, $alias = null)
- * @method bool chunk($count, callable $callback)
- * @method \Hyperf\Utils\Collection pluck($column, $key = null)
- * @method LengthAwarePaginatorInterface paginate(int $perPage = null, array $columns = ['*'], string $pageName = 'page', ?int $page = null)
- * @method \Hyperf\Contract\PaginatorInterface simplePaginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
- * @method HyperfBaseModel create(array $attributes = [])
- * @method HyperfBaseModel forceCreate(array $attributes)
- * @method int update(array $values)
- * @method int increment($column, $amount = 1, array $extra = [])
- * @method int decrement($column, $amount = 1, array $extra = [])
- * @method delete()
- * @method forceDelete()
- * @method onDelete(Closure $callback)
- * @method scopes(array $scopes)
- * @method applyScopes()
- * @method HyperfBaseModel with($relations)
- * @method HyperfBaseModel without($relations)
- * @method HyperfBaseModel newModelInstance($attributes = [])
- * @method \Hyperf\Database\Query\Builder getQuery()
- * @method \Hyperf\Database\Query\Builder setQuery($query)
- * @method \Hyperf\Database\Query\Builder toBase()
- * @method \Hyperf\Database\Query\Builder orderBy($column, $direction = 'asc')
- * @method \Hyperf\Database\Query\Builder orderByDesc($column, $direction = 'asc')
- * @method \Hyperf\Database\Query\Builder inRandomOrder($seed = '')
- * @method \Hyperf\Database\Query\Builder orderByRaw($sql, $bindings = [])
- * @method \Hyperf\Database\Query\Builder skip($value)
- * @method \Hyperf\Database\Query\Builder offset($value)
- * @method \Hyperf\Database\Query\Builder take($value)
- * @method \Hyperf\Database\Query\Builder limit($value)
- * @method \Hyperf\Database\Query\Builder forPage($page, $perPage = 15)
- * @method \Hyperf\Database\Query\Builder forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')
- * @method \Hyperf\Database\Query\Builder union($query, $all = false)
- * @method \Hyperf\Database\Query\Builder unionAll($query)
- * @method \Hyperf\Database\Query\Builder lock($value = true)
- * @method \Hyperf\Database\Query\Builder lockForUpdate()
- * @method \Hyperf\Database\Query\Builder sharedLock()
- * @method string toSql()
- * @method \Hyperf\Database\Query\Builder select($columns = ['*'])
- * @method \Hyperf\Database\Query\Builder selectSub($query, $as)
- * @method \Hyperf\Database\Query\Builder selectRaw($expression, array $bindings = [])
- * @method \Hyperf\Database\Query\Builder fromSub($query, $as)
- * @method \Hyperf\Database\Query\Builder fromRaw($expression, $bindings = [])
- * @method \Hyperf\Database\Query\Builder addSelect($column)
- * @method \Hyperf\Database\Query\Builder from($table)
- * @method \Hyperf\Database\Query\Builder join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)
- * @method \Hyperf\Database\Query\Builder joinWhere($table, $first, $operator, $second, $type = 'inner')
- * @method \Hyperf\Database\Query\Builder joinSub($query, $as, $first, $operator = null, $second = null, $type = 'inner', $where = false)
- * @method \Hyperf\Database\Query\Builder leftJoin($table, $first, $operator = null, $second = null)
- * @method \Hyperf\Database\Query\Builder leftJoinWhere($table, $first, $operator, $second)
- * @method \Hyperf\Database\Query\Builder leftJoinSub($query, $as, $first, $operator = null, $second = null)
- * @method \Hyperf\Database\Query\Builder distinct()
- * @method \Hyperf\Database\Query\Builder rightJoin($table, $first, $operator = null, $second = null)
- * @method \Hyperf\Database\Query\Builder rightJoinWhere($table, $first, $operator, $second)
- * @method \Hyperf\Database\Query\Builder rightJoinSub($query, $as, $first, $operator = null, $second = null)
- * @method \Hyperf\Database\Query\Builder crossJoin($table, $first = null, $operator = null, $second = null)
- * @method void mergeWheres($wheres, $bindings)
- * @method array prepareValueAndOperator($value, $operator, $useDefault = false)
- * @method \Hyperf\Database\Query\Builder whereColumn($first, $operator = null, $second = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereColumn($first, $operator = null, $second = null)
- * @method \Hyperf\Database\Query\Builder whereRaw($sql, $bindings = [], $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereRaw($sql, $bindings = [])
- * @method \Hyperf\Database\Query\Builder orWhereIn($column, $values)
- * @method \Hyperf\Database\Query\Builder orWhereNotIn($column, $values)
- * @method \Hyperf\Database\Query\Builder whereIntegerInRaw($column, $values, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder whereIntegerNotInRaw($column, $values, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder whereNull($column, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder orWhereNull($column)
- * @method \Hyperf\Database\Query\Builder whereNotNull($column, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder whereBetween($column, array $values, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder orWhereBetween($column, array $values)
- * @method \Hyperf\Database\Query\Builder whereNotBetween($column, array $values, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereNotBetween($column, array $values)
- * @method \Hyperf\Database\Query\Builder orWhereNotNull($column)
- * @method \Hyperf\Database\Query\Builder whereDate($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereDate($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder whereTime($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereTime($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder whereDay($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereDay($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder whereMonth($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereMonth($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder whereYear($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereYear($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder whereNested(\Closure $callback, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder forNestedWhere()
- * @method \Hyperf\Database\Query\Builder addNestedWhereQuery($query, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder whereExists(\Closure $callback, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder orWhereExists(\Closure $callback, $not = false)
- * @method \Hyperf\Database\Query\Builder whereNotExists(\Closure $callback, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereNotExists(\Closure $callback)
- * @method \Hyperf\Database\Query\Builder addWhereExistsQuery(self $query, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder whereRowValues($columns, $operator, $values, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereRowValues($columns, $operator, $values)
- * @method \Hyperf\Database\Query\Builder whereJsonContains($column, $value, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder orWhereJsonContains($column, $value)
- * @method \Hyperf\Database\Query\Builder whereJsonDoesntContain($column, $value, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereJsonDoesntContain($column, $value)
- * @method \Hyperf\Database\Query\Builder whereJsonLength($column, $operator, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orWhereJsonLength($column, $operator, $value = null)
- * @method \Hyperf\Database\Query\Builder dynamicWhere($method, $parameters)
- * @method \Hyperf\Database\Query\Builder groupBy(...$groups)
- * @method \Hyperf\Database\Query\Builder having($column, $operator = null, $value = null, $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orHaving($column, $operator = null, $value = null)
- * @method \Hyperf\Database\Query\Builder havingBetween($column, array $values, $boolean = 'and', $not = false)
- * @method \Hyperf\Database\Query\Builder havingRaw($sql, array $bindings = [], $boolean = 'and')
- * @method \Hyperf\Database\Query\Builder orHavingRaw($sql, array $bindings = [])
- * @method int getCountForPagination($columns = ['*'])
- * @method string implode($column, $glue = '')
- * @method bool doesntExist()
- * @method int count($columns = '*')
- * @method string min($column)
- * @method string max($column)
- * @method string sum($column)
- * @method string avg($column)
- * @method string average($column)
- * @method \Hyperf\Database\Model\Collection forceFill(array $attributes)
- * @method \Hyperf\Database\Model\Model all($columns = ['*'])
- * @method string qualifyColumn($column)
- * @method static newInstance($attributes = [], $exists = false)
- * @method static newFromBuilder($attributes = [], $connection = null)
- * @method \Hyperf\Database\Model\Builder on($connection = null)
- * @method \Hyperf\Database\Query\Builder onWriteConnection()
- * @method \Hyperf\Database\Model\Model load($relations)
- * @method \Hyperf\Database\Model\Model loadMissing($relations)
- * @method \Hyperf\Database\Model\Model loadCount($relations)
- * @method bool push()
- * @method bool save(array $options = [])
- * @method bool saveOrFail(array $options = [])
- * @method int destroy($ids)
- * @method \Hyperf\Database\Model\Builder newQuery()
- * @method \Hyperf\Database\Model\Builder newModelQuery()
- * @method \Hyperf\Database\Model\Builder newQueryWithoutRelationships()
- * @method \Hyperf\Database\Model\Builder registerGlobalScopes($builder)
- * @method \Hyperf\Database\Model\Builder newQueryWithoutScopes()
- * @method \Hyperf\Database\Model\Builder newQueryWithoutScope($scope)
- * @method \Hyperf\Database\Model\Builder newQueryForRestoration($ids)
- * @method \Hyperf\Database\Model\Builder newModelBuilder($query)
- * @method \Hyperf\Database\Model\Collection newCollection(array $models = [])
- * @method \Hyperf\Database\Model\Relations\Pivot newPivot(self $parent, array $attributes, $table, $exists, $using = null)
- * @method array toArray()
- * @method string toJson($options = 0)
- * @method array jsonSerialize()
- * @method static fresh($with = [])
- * @method \Hyperf\Database\Model\Model refresh()
- * @method static replicate(array $except = null)
- * @method bool is($model)
- * @method bool isNot($model)
- * @method ConnectionInterface getConnection()
- * @method EventDispatcherInterface getEventDispatcher()
- * @method string getConnectionName()
- * @method \Hyperf\Database\Model\Model setConnection($name)
- * @method string getTable()
- * @method \Hyperf\Database\Model\Model setTable($table)
- * @method string getKeyName()
- * @method \Hyperf\Database\Model\Model setKeyName($key)
- * @method string getQualifiedKeyName()
- * @method string getKeyType()
- * @method bool getIncrementing()
- * @method \Hyperf\Database\Model\Model setIncrementing($value)
- * @method mixed getKey()
- * @method mixed getRouteKey()
- * @method mixed getRouteKeyName()
- * @method array getEagerLoads()
- * @method \Hyperf\Database\Model\Model resolveRouteBinding($value)
- * @method string getForeignKey()
- * @method int getPerPage()
- * @method \Hyperf\Database\Model\Model setPerPage($perPage)
- * @method bool offsetExists($offset)
- * @method mixed offsetGet($offset)
- * @method mixed offsetSet($offset, $value)
- * @method mixed offsetUnset($offset)
- * @method mixed compress()
- * @method \Hyperf\Database\Model\Model first($columns = ['*'])
- * @method bool each(callable $callback, $count = 1000)
- * @method \Hyperf\Database\Model\Model when($value, $callback, $default = null)
- * @method \Hyperf\Database\Model\Model tap($callback)
- * @method \Hyperf\Database\Model\Model unless($value, $callback, $default = null)
- * @method HyperfModelBuilder setEagerLoads(array $eagerLoad)
- * @method \Hyperf\Database\Model\Model getModel()
- * @method Model setModel(Model $model)
- * @method \Closure getMacro($name)
- * @package App\Model\BaseModel
- */
- abstract class BaseModel extends HyperfBaseModel
- {
- // 使用自动缓存.
- //implements CacheableInterface
- // use Cacheable;
- // 使用软删.
- // use SoftDeletes;
- protected $guarded = ['id'];
- protected $connection = 'default';
- /**
- * 自定义主键名.
- *
- * @var string
- */
- protected $primaryKey = 'id';
- /**
- * 主键类型.
- *
- * @var string
- */
- protected $keyType = 'integer';
- /**
- * 自动维护时间戳created_at和updated_at.
- *
- * @var bool
- */
- public $timestamps = true;
- /**
- * 是否默认主键自增.
- *
- * @var bool
- */
- public $incrementing = true;
- /**
- * 每页尺码.
- *
- * @var int
- */
- protected $perPage = 20;
- /**
- * 获取数据库版本.
- *
- * @return mixed
- */
- public function getDbVersion()
- {
- return $this->getConnection()->getPdo()->getAttribute(\PDO::ATTR_SERVER_VERSION);
- }
- /**
- * 获取表前缀.
- *
- * @return mixed
- */
- public function getTablePrefix() : string
- {
- return $this->getConnection()->getTablePrefix();
- }
- /**
- * 生成一个ID
- *
- * @param string $idName 查询唯一ID字段名.
- * @param integer $length 长度.
- *
- * @return string
- */
- public function generateId(string $idName, $length = 16)
- {
- if ($length <= 3) {
- $length = 16;
- }
- $uuid = strtoupper(rand_letter(1) . (random($length - 1)));
- if ($this->where($idName, $uuid)->exists()) {
- // 存在则继续生成,直到新的出现.
- return self::generateId($idName, $length);
- }
- return $uuid;
- }
- }
|