$v) { $img = get_thumb_images($data[ 'site_id' ], $v, FileDict::SMALL); if (!empty($img)) { $img_arr[] = $img; } } return $img_arr; } return []; } /** * 获取商品图片缩略图(中) */ public function getGoodsImageThumbMidAttr($value, $data) { if (isset($data[ 'goods_image' ]) && $data[ 'goods_image' ] != '') { $goods_image = explode(',', $data[ 'goods_image' ]); $img_arr = []; foreach ($goods_image as $k => $v) { $img = get_thumb_images($data[ 'site_id' ], $v, FileDict::MID); if (!empty($img)) { $img_arr[] = $img; } } return $img_arr; } return []; } /** * 获取商品图片缩略图(大) */ public function getGoodsImageThumbBigAttr($value, $data) { if (isset($data[ 'goods_image' ]) && $data[ 'goods_image' ] != '') { $goods_image = explode(',', $data[ 'goods_image' ]); $img_arr = []; foreach ($goods_image as $k => $v) { $img = get_thumb_images($data[ 'site_id' ], $v, FileDict::BIG); if (!empty($img)) { $img_arr[] = $img; } } return $img_arr; } return []; } /** * 获取商品分类 */ public function getGoodsCategoryAttr($value, $data) { if (!is_array($value)) { $value = json_decode($value, true); } if (!empty($value)) { return array_map(function($item) { return (int) $item; }, $value); } return []; } /** * 搜索器:商品商品id * @param $value * @param $data */ public function searchGoodsIdAttr($query, $value, $data) { if ($value) { $query->where('goods_id', $value); } } /** * 搜索器:商品商品名称 * @param $value * @param $data */ public function searchGoodsNameAttr($query, $value, $data) { if ($value) { $query->where('goods_name', 'like', '%' . $value . '%'); } } /** * 搜索器:商品副标题 * @param $value * @param $data */ public function searchSubTitleAttr($query, $value, $data) { if ($value) { $query->where('sub_title', 'like', '%' . $value . '%'); } } /** * 搜索器:关键词 * @param $value * @param $data */ public function searchKeywordAttr($query, $value, $data) { if ($value) { $query->whereLike('goods_name|sub_title', '%' . $value . '%'); } } /** * 搜索器:商品商品类型 * @param $value * @param $data */ public function searchGoodsTypeAttr($query, $value, $data) { if ($value) { $query->where('goods_type', $value); } } /** * 搜索器:商品商品品牌id * @param $value * @param $data */ public function searchBrandIdAttr($query, $value, $data) { if ($value) { $query->where('brand_id', $value); } } /** * 搜索器:商品商品品牌id(关联查询使用) * @param $value * @param $data */ public function searchSiteIdAttr($query, $value, $data) { if ($value) { $query->where('goods.site_id', $value); } } /** * 平台商品分类查询 * @param $query * @param $value * @param $data */ public function searchGoodsMallCategoryAttr($query, $value, $data) { if ($value) { if (is_array($value)) { $value = end($value); } //查询分类信息 $goods_category_model = new Category(); $category_info = $goods_category_model->where([ [ 'category_id', '=', $value ] ])->field('category_id,level,pid')->findOrEmpty()->toArray(); if ($category_info[ 'level' ] == 3) { $query->where('goods_mall_category', $value); } elseif ($category_info[ 'level' ] == 2) { $category_ids = $value; $category_list = $goods_category_model->where([ [ 'pid', '=', $value ] ])->field('category_id,level,pid')->select()->toArray(); if (!empty($category_list)) { foreach ($category_list as $k => $v) { $category_ids = $category_ids . ',' . $v[ 'category_id' ]; } } $query->where('goods_mall_category', 'in', $category_ids); } else { // 一级 $category_ids = $value; $child_list = $goods_category_model->where([ [ 'pid', '=', $value ] ])->field('category_id,level,pid')->select()->toArray(); if (!empty($child_list)) { $child_ids = ''; foreach ($child_list as $k => $v) { $category_ids = $category_ids . ',' . $v[ 'category_id' ]; $child_ids = $child_ids == '' ? $v[ 'category_id' ] : $child_ids . ',' . $v[ 'category_id' ]; } $grand_child_list = $goods_category_model->where([ [ 'pid', 'in', $child_ids ] ])->field('category_id,level')->select()->toArray(); if (!empty($grand_child_list)) { foreach ($grand_child_list as $k_child => $v_child) { $category_ids = $category_ids . ',' . $v_child[ 'category_id' ]; } } $query->where('goods_mall_category', 'in', $category_ids); } else { $query->where('goods_mall_category', '=', $category_ids); } } } } /** * 搜索器:商品商品分类 * @param $value * @param $data */ public function searchGoodsCategoryAttr($query, $value, $data) { if ($value) { if (is_array($value)) { $temp_where = array_map(function($item) { return '%"' . $item . '"%'; }, $value); } else { $temp_where = [ '%"' . $value . '"%' ]; } $query->where('goods_category', 'like', $temp_where, 'or'); } } /** * 搜索器:商品标签组 * @param $value * @param $data */ public function searchLabelIdsAttr($query, $value, $data) { if ($value) { if (is_array($value)) { $temp_where = array_map(function($item) { return '%"' . $item . '"%'; }, $value); } else { $temp_where = [ '%"' . $value . '"%' ]; } $query->where('label_ids', 'like', $temp_where, 'or'); } } /** * 搜索器:商品服务 * @param $value * @param $data */ public function searchServiceIdsAttr($query, $value, $data) { if ($value) { if (is_array($value)) { $temp_where = array_map(function($item) { return '%"' . $item . '"%'; }, $value); } else { $temp_where = [ '%"' . $value . '"%' ]; } $query->where('service_ids', 'like', $temp_where, 'or'); } } /** * 搜索器:商品销量 * @param $value * @param $data */ public function searchSaleNumAttr($query, $value, $data) { if (!empty($data[ 'start_sale_num' ]) && !empty($data[ 'end_sale_num' ])) { $money = [ $data[ 'start_sale_num' ], $data[ 'end_sale_num' ] ]; sort($money); $query->where('goods.sale_num', 'between', $money); } elseif (!empty($data[ 'start_sale_num' ])) { $query->where('goods.sale_num', '>=', $data[ 'start_sale_num' ]); } elseif (!empty($data[ 'end_sale_num' ])) { $query->where('goods.sale_num', '<=', $data[ 'end_sale_num' ]); } } /** * 搜索器:商品sku是否默认 * @param $value * @param $data */ public function searchGoodsSkuIsDefaultAttr($query, $value, $data) { if ($value) { $query->where('goodsSku.is_default', $value); } } /** * 搜索器:商品sku价格 * @param $value * @param $data */ public function searchGoodsSkuPriceAttr($query, $value, $data) { if (!empty($data[ 'start_price' ]) && !empty($data[ 'end_price' ])) { $money = [ $data[ 'start_price' ], $data[ 'end_price' ] ]; sort($money); $query->where('goodsSku.price', 'between', $money); } elseif (!empty($data[ 'start_price' ])) { $query->where('goodsSku.price', '>=', $data[ 'start_price' ]); } elseif (!empty($data[ 'end_price' ])) { $query->where('goodsSku.price', '<=', $data[ 'end_price' ]); } } /** * 搜索器:优惠券id(查询适用优惠券的商品列表) * @param $value * @param $data */ public function searchCouponIdAttr($query, $value, $data) { if ($value) { $coupon_goods_model = new CouponGoods(); $coupon = (new Coupon())->where([ [ 'id', '=', $value ] ])->field('site_id, is_all_site_join, join_site_ids')->findOrEmpty()->toArray(); $coupon_list = $coupon_goods_model->where([ [ 'coupon_id', '=', $value ] ])->field('goods_id,category_id,mall_category_id,brand_id')->select()->toArray(); if (!empty($coupon_list)) { $goods_ids = array_values(array_filter(array_column($coupon_list, 'goods_id'))); $category_ids = array_values(array_filter(array_column($coupon_list, 'category_id'))); $mall_category_ids = array_values(array_filter(array_column($coupon_list, 'mall_category_id'))); $brand_ids = array_values(array_filter(array_column($coupon_list, 'brand_id'))); if (!empty($goods_ids)) { $query->where('goods.goods_id', 'in', $goods_ids); } elseif (!empty($category_ids)) { $like_arr = []; foreach ($category_ids as $v) { $like_arr[] = '%' . $v . '%'; } $query->where('goods_category', 'like', $like_arr, 'or'); } elseif (!empty($mall_category_ids)) { $query->where('goods_mall_category', 'in', $mall_category_ids); } elseif (!empty($brand_ids)) { $query->where('brand_id', 'in', $brand_ids); } } if (!empty($coupon)) { if ($coupon['site_id']) { $query->where(function ($query) use ($coupon){ $query->where('goods.site_id', '=', $coupon['site_id']); }); } else { if ($coupon['is_all_site_join'] == CouponDict::NOT_ALL_SITE_JOIN) { $query->where(function ($query) use ($coupon){ $query->where('goods.site_id', 'in', $coupon['join_site_ids']); }); } } } } } /** * 搜索器:商品商品状态(1.正常0下架) * @param $value * @param $data */ public function searchStatusAttr($query, $value, $data) { if ($value !== '') { $query->where('goods.status', $value); } } /** * 搜索器:供应商id * @param $value * @param $data */ public function searchSupplierIdAttr($query, $value, $data) { if ($value) { $query->where('supplier_id', $value); } } /** * 关联默认商品规格 * @return HasOne */ public function goodsSku() { return $this->hasOne(GoodsSku::class, 'goods_id', 'goods_id'); } /** * 关联商品规格列表 * @return HasMany */ public function skuList() { return $this->hasMany(GoodsSku::class, 'goods_id', 'goods_id'); } /** * 关联站点信息 * @return HasOne */ public function site() { return $this->hasOne(Site::class, 'site_id', 'site_id'); } /** * 关联店铺信息 * @return HasOne */ public function shop() { return $this->hasOne(Shop::class, 'site_id', 'site_id'); } /** * 关联商品规格列表 * @return HasMany */ public function goodsSpec() { return $this->hasMany(GoodsSpec::class, 'goods_id', 'goods_id'); } /** * 关联默认商品规格 * @return HasOne */ public function brand() { return $this->hasOne(Brand::class, 'brand_id', 'brand_id') ->joinType('left') ->withField('brand_id, brand_name, logo, desc'); } }