OperateLogDao.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace app\common\dao\system\operate;
  3. use app\common\dao\BaseDao;
  4. use app\common\model\BaseModel;
  5. use app\common\model\system\operate\OperateLog;
  6. class OperateLogDao extends BaseDao
  7. {
  8. /**
  9. * @return BaseModel
  10. * @author xaboy
  11. * @day 2020-03-30
  12. */
  13. protected function getModel(): string
  14. {
  15. return OperateLog::class;
  16. }
  17. /**
  18. * 根据条件搜索数据。
  19. *
  20. * 该方法通过传入的$where数组条件来查询数据库。它支持多种条件组合查询,包括类型、类别、相关性标题、操作者昵称、商家ID、时间范围、相关性ID和相关性类型等。
  21. * 每个条件都是可选的,只有当条件的值被设置且不为空时,才会添加到查询中。
  22. *
  23. * @param array $where 查询条件数组,包含各种可能的搜索条件。
  24. * @return \yii\db\ActiveQuery 返回构建的查询对象,可以进一步调用其他查询方法,如获取数据等。
  25. */
  26. public function search($where)
  27. {
  28. // 获取模型对应的数据库对象
  29. return $this->getModel()::getDb()
  30. // 当类型条件存在且不为空时,添加到查询中
  31. ->when(isset($where['type']) && $where['type'] != '', function ($query) use ($where) {
  32. $query->where('type', $where['type']);
  33. })
  34. // 当类别条件存在且不为空时,添加到查询中
  35. ->when(isset($where['category']) && $where['category'] != '', function ($query) use ($where) {
  36. $query->where('category', $where['category']);
  37. })
  38. // 当相关性标题条件存在且不为空时,以LIKE形式添加到查询中
  39. ->when(isset($where['relevance_title']) && $where['relevance_title'] != '', function ($query) use ($where) {
  40. $query->whereLike('relevance_title', "%{$where['relevance_title']}%");
  41. })
  42. // 当操作者昵称条件存在且不为空时,以LIKE形式添加到查询中
  43. ->when(isset($where['operator_nickname']) && $where['operator_nickname'] != '', function ($query) use ($where) {
  44. $query->whereLike('operator_nickname', "%{$where['operator_nickname']}%");
  45. })
  46. // 当商家ID条件存在且不为空时,添加到查询中
  47. ->when(isset($where['mer_id']) && $where['mer_id'] != '', function ($query) use ($where) {
  48. $query->where('mer_id', $where['mer_id']);
  49. })
  50. // 当日期条件存在且不为空时,调用外部函数处理时间范围查询
  51. ->when(isset($where['date']) && $where['date'] != '', function ($query) use ($where) {
  52. getModelTime($query, $where['date']);
  53. })
  54. // 当相关性ID条件存在且不为空时,添加到查询中
  55. ->when(isset($where['relevance_id']) && $where['relevance_id'] != '', function ($query) use ($where) {
  56. $query->where('relevance_id', $where['relevance_id']);
  57. })
  58. // 当相关性类型条件存在且不为空时,如果条件为数组,则使用whereIn查询,否则直接等于查询
  59. ->when(isset($where['relevance_type']) && $where['relevance_type'] != '', function ($query) use ($where) {
  60. if (is_array($where['relevance_type'])) {
  61. $query->whereIn('relevance_id', $where['relevance_id']);
  62. } else {
  63. $query->where('relevance_id', $where['relevance_id']);
  64. }
  65. })
  66. // 当相关性标题条件存在且不为空时,添加到查询中(此段代码可能为重复或错误,因前面已处理过相同条件)
  67. ->when(isset($where['relevance_title']) && $where['relevance_title'] != '', function ($query) use ($where) {
  68. $query->where('relevance_title', $where['relevance_title']);
  69. });
  70. }
  71. }