Product.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace app\model\system;
  3. use library\basic\BaseModel;
  4. use library\traits\ModelTrait;
  5. /**
  6. * TODO 商品Model
  7. * Class Product
  8. * @package app\model\system
  9. */
  10. class Product extends BaseModel
  11. {
  12. /**
  13. * 数据表主键
  14. * @var string
  15. */
  16. protected $pk = 'id';
  17. /**
  18. * 模型名称
  19. * @var string
  20. */
  21. protected $name = 'product';
  22. use ModelTrait;
  23. /**
  24. * 获取商品列表
  25. * @param $where array
  26. * @return array
  27. *
  28. */
  29. public static function ProductList($where)
  30. {
  31. $model = (new Product)->getWhere($where)->field([
  32. '*',
  33. '(SELECT SUM(stock) FROM table_product_attr_value WHERE product_id = table_product.id AND type = 0) as stock',
  34. '(SELECT SUM(sales) FROM table_product_attr_value WHERE product_id = table_product.id AND type = 0) as sales'
  35. ]);
  36. $model = $model->page((int)$where['page'], (int)$where['limit']);
  37. $data = ($data = $model->select()) && count($data) ? $data->toArray() : [];
  38. foreach ($data as &$item) {
  39. $cateName = Category::alias('c')->join('Category b', 'b.id = c.pid')->where('c.id', $item['cate_id'])->column('c.cate_name as two,b.cate_name as one', 'c.id');
  40. $item['cate_name'] = [];
  41. foreach ($cateName as $k => $v) {
  42. $item['cate_name'][] = $v['one'] . '/' . $v['two'];
  43. }
  44. $item['cate_name'] = is_array($item['cate_name']) ? implode(',', $item['cate_name']) : '';
  45. $item['stock_attr'] = $item['stock'] > 0 ? true : false;//库存
  46. }
  47. unset($item);
  48. $count = (new Product)->getWhere($where)->count();
  49. return ['count' => $count, 'list' => $data];
  50. }
  51. /**
  52. * 查询条件
  53. * @param $model
  54. * @return object
  55. */
  56. public function getWhere($where = [])
  57. {
  58. $model = new self();
  59. if (!empty($where)) {
  60. $type = $where['type'] ?? 0;
  61. switch ((int)$type) {
  62. case 1:
  63. $model = $model->where(['is_show' => 1, 'is_del' => 0]);
  64. break;
  65. case 2:
  66. $model = $model->where(['is_show' => 0, 'is_del' => 0]);
  67. break;
  68. case 3:
  69. $model = $model->where(['is_del' => 0]);
  70. break;
  71. case 4:
  72. $model = $model->where(['is_del' => 0])->whereIn('id', function ($query) {
  73. $query->name('product_attr_value')->where('stock', 0)->where('type', 0)->field('product_id')->select();
  74. })->where(function ($query) {
  75. $query->whereOr('stock', 0);
  76. });
  77. break;
  78. case 5:
  79. $model = $model->where(['is_show' => 1, 'is_del' => 0])->where('stock', '<=', 3)->where('stock', '>', 0);
  80. break;
  81. case 6:
  82. $model = $model->where(['is_del' => 1]);
  83. break;
  84. case 7:
  85. $model = $model->where(['is_one' => 1, 'is_del' => 0]);
  86. break;
  87. };
  88. if (isset($where['mer_id']) && $where['mer_id'] != '') {
  89. $model = $model->where('mer_id', $where['mer_id']);
  90. }
  91. if (isset($where['store_name']) && $where['store_name'] != '') {
  92. $model = $model->where('store_name|keyword|id', 'LIKE', "%$where[store_name]%");
  93. }
  94. if (isset($where['cate_id']) && $where['cate_id'] != '') {
  95. $model = $model->where('cate_id', $where['cate_id']);
  96. }
  97. $model = $model->order('sort desc,id desc');
  98. }
  99. return $model;
  100. }
  101. }