FactoryModel.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace app\common\model\ps;
  3. use app\common\library\ps\FactoryContext;
  4. use think\Model;
  5. /**
  6. * 工厂隔离基类。会员请求自动带 factory_id,后台超管不限制。
  7. */
  8. class FactoryModel extends Model
  9. {
  10. protected $autoWriteTimestamp = 'int';
  11. protected $createTime = 'createtime';
  12. protected $updateTime = 'updatetime';
  13. /**
  14. * 全局查询范围
  15. * @param \think\db\Query $query
  16. */
  17. protected function base($query)
  18. {
  19. if (FactoryContext::bypass()) {
  20. return;
  21. }
  22. $factoryId = FactoryContext::id();
  23. // 不要在 base() 里调用 getTable():会再次初始化查询导致无限递归,PHP-CGI 直接崩溃。
  24. $query->where('factory_id', $factoryId > 0 ? $factoryId : -1);
  25. }
  26. protected static function init()
  27. {
  28. static::beforeInsert(function ($row) {
  29. if (FactoryContext::bypass()) {
  30. return;
  31. }
  32. if (!isset($row['factory_id']) || !$row['factory_id']) {
  33. $row['factory_id'] = FactoryContext::requireId();
  34. }
  35. });
  36. }
  37. }