User.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\model\user;
  12. use app\model\agent\AgentLevel;
  13. use app\model\order\StoreOrder;
  14. use app\model\system\SystemUserLevel;
  15. use crmeb\basic\BaseModel;
  16. use crmeb\traits\ModelTrait;
  17. use think\Model;
  18. /**
  19. * Class User
  20. * @package app\model\user
  21. */
  22. class User extends BaseModel
  23. {
  24. use ModelTrait;
  25. /**
  26. * @var string
  27. */
  28. protected $pk = 'uid';
  29. protected $name = 'user';
  30. protected $insert = ['add_time', 'add_ip', 'last_time', 'last_ip'];
  31. protected $hidden = [
  32. 'add_ip', 'account', 'clean_time', 'last_ip', 'pwd'
  33. ];
  34. /**
  35. * 自动转类型
  36. * @var string[]
  37. */
  38. protected $type = [
  39. 'birthday' => 'int'
  40. ];
  41. protected $updateTime = false;
  42. protected function setAddTimeAttr($value)
  43. {
  44. return time();
  45. }
  46. protected function setAddIpAttr($value)
  47. {
  48. return app('request')->ip();
  49. }
  50. protected function setLastTimeAttr($value)
  51. {
  52. return time();
  53. }
  54. protected function setLastIpAttr($value)
  55. {
  56. return app('request')->ip();
  57. }
  58. /**
  59. * 链接会员登陆设置表
  60. * @return \think\model\relation\HasOne
  61. */
  62. public function systemUserLevel()
  63. {
  64. return $this->hasOne(SystemUserLevel::class, 'id', 'level');
  65. }
  66. /**
  67. * 关联用户分组
  68. * @return \think\model\relation\HasOne
  69. */
  70. public function userGroup()
  71. {
  72. return $this->hasOne(UserGroup::class, 'id', 'group_id');
  73. }
  74. /**
  75. * 关联自己
  76. * @return \think\model\relation\HasOne
  77. */
  78. public function spreadUser()
  79. {
  80. return $this->hasOne(self::class, 'uid', 'spread_uid');
  81. }
  82. /**
  83. * 关联自己
  84. * @return \think\model\relation\HasOne
  85. */
  86. public function spreadCount()
  87. {
  88. return $this->hasMany(User::class, 'spread_uid', 'uid');
  89. }
  90. /**
  91. * 关联用户标签关系
  92. * @return \think\model\relation\HasMany
  93. */
  94. public function LabelRelation()
  95. {
  96. return $this->hasMany(UserLabelRelation::class, 'uid', 'uid');
  97. }
  98. /**
  99. * 关联用户标签
  100. * @return \think\model\relation\HasManyThrough
  101. */
  102. public function label()
  103. {
  104. return $this->hasManyThrough(UserLabel::class, UserLabelRelation::class, 'uid', 'id', 'uid', 'label_id');
  105. }
  106. /**
  107. * 关联用户地址
  108. * @return \think\model\relation\HasMany
  109. */
  110. public function address()
  111. {
  112. return $this->hasMany(UserAddress::class, 'uid', 'uid');
  113. }
  114. /**
  115. * 关联提现
  116. * @return \think\model\relation\HasMany
  117. */
  118. public function extract()
  119. {
  120. return $this->hasMany(UserExtract::class, 'uid', 'uid');
  121. }
  122. /**
  123. * 关联订单
  124. * @return User|\think\model\relation\HasMany
  125. */
  126. public function order()
  127. {
  128. return $this->hasMany(StoreOrder::class, 'uid', 'uid');
  129. }
  130. /**
  131. * 关联分销等级
  132. * @return \think\model\relation\HasOne
  133. */
  134. public function agentLevel()
  135. {
  136. return $this->hasOne(AgentLevel::class, 'id', 'agent_level')->where('is_del', 0)->where('status', 1);
  137. }
  138. /**
  139. * 关联佣金数据
  140. * @return \think\model\relation\HasMany
  141. */
  142. public function bill()
  143. {
  144. return $this->hasMany(UserBill::class, 'uid', 'uid');
  145. }
  146. /**
  147. * 用户uid
  148. * @param Model $query
  149. * @param $value
  150. */
  151. public function searchUidAttr($query, $value)
  152. {
  153. if (is_array($value))
  154. $query->whereIn('uid', $value);
  155. else
  156. $query->where('uid', $value);
  157. }
  158. /**
  159. * 账号搜索器
  160. * @param Model $query
  161. * @param $value
  162. */
  163. public function searchAccountAttr($query, $value)
  164. {
  165. $query->where('account', $value);
  166. }
  167. /**
  168. * 密码搜索器
  169. * @param Model $query
  170. * @param $value
  171. */
  172. public function searchPwdAttr($query, $value)
  173. {
  174. $query->where('pwd', $value);
  175. }
  176. /**
  177. * uid范围查询搜索器
  178. * @param Model $query
  179. * @param $value
  180. */
  181. public function searchUidsAttr($query, $value)
  182. {
  183. $query->whereIn('uid', $value);
  184. }
  185. /**
  186. * 模糊条件搜索器
  187. * @param Model $query
  188. * @param $value
  189. */
  190. public function searchLikeAttr($query, $value)
  191. {
  192. $query->where('account|nickname|phone|real_name|uid', 'LIKE', "%$value%");
  193. }
  194. /**
  195. * 手机号搜索器
  196. * @param Model $query
  197. * @param $value
  198. */
  199. public function searchPhoneAttr($query, $value)
  200. {
  201. $query->where('phone', $value);
  202. }
  203. /**
  204. * 分组搜索器
  205. * @param Model $query
  206. * @param $value
  207. */
  208. public function searchGroupIdAttr($query, $value)
  209. {
  210. $query->where('group_id', $value);
  211. }
  212. /**
  213. * 是否推广人搜索器
  214. * @param Model $query
  215. * @param $value
  216. */
  217. public function searchIsPromoterAttr($query, $value)
  218. {
  219. $query->where('is_promoter', $value);
  220. }
  221. /**
  222. * 状态搜索器
  223. * @param Model $query
  224. * @param $value
  225. */
  226. public function searchStatusAttr($query, $value)
  227. {
  228. $query->where('status', $value);
  229. }
  230. /**
  231. * 会员等级搜索器
  232. * @param Model $query
  233. * @param $value
  234. */
  235. public function searchLevelAttr($query, $value)
  236. {
  237. $query->where('level', $value);
  238. }
  239. /**
  240. * 推广人uid搜索器
  241. * @param Model $query
  242. * @param $value
  243. */
  244. public function searchSpreadUidAttr($query, $value)
  245. {
  246. $query->where('spread_uid', $value);
  247. }
  248. /**
  249. * 推广人uid不等于搜索器
  250. * @param Model $query
  251. * @param $value
  252. */
  253. public function searchNotSpreadUidAttr($query, $value)
  254. {
  255. $query->where('spread_uid', '<>', $value);
  256. }
  257. /**
  258. * 推广人时间搜索器
  259. * @param Model $query
  260. * @param $value
  261. */
  262. public function searchSpreadTimeAttr($query, $value)
  263. {
  264. if ($value) {
  265. if (is_array($value)) {
  266. if (count($value) == 2) $query->whereTime('spread_time', $value[0], $value[1]);
  267. } else {
  268. $query->whereTime('spread_time', $value);
  269. }
  270. }
  271. }
  272. /**
  273. * 用户类型搜索器
  274. * @param Model $query
  275. * @param $value
  276. */
  277. public function searchUserTypeAttr($query, $value)
  278. {
  279. if ($value != '') $query->where('user_type', $value);
  280. }
  281. /**
  282. * 购买次数搜索器
  283. * @param Model $query
  284. * @param $value
  285. */
  286. public function searchPayCountAttr($query, $value)
  287. {
  288. $query->where('pay_count', $value);
  289. }
  290. /**
  291. * 用户推广资格
  292. * @param Model $query
  293. * @param $value
  294. */
  295. public function searchSpreadOpenAttr($query, $value)
  296. {
  297. if ($value != '') $query->where('spread_open', $value);
  298. }
  299. public function searchNicknameAttr($query, $value)
  300. {
  301. $query->where('nickname', "like", "%" . $value . "%");
  302. }
  303. }