我是靠谱客的博主 畅快天空,最近开发中收集的这篇文章主要介绍13.pyg04-多图上传及品牌管理,关联查询品优购电商项目04商品相关数据表十三、文件上传十四、商品品牌管理十五、连表查询与关联模型十六、商品模型(类型)管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

品优购电商项目04

商品相关数据表

1、商品分类、商品品牌、商品、商品相册

在这里插入图片描述

2、商品、商品模型、商品属性

在这里插入图片描述

3、商品、商品模型、商品SKU

SPU: 最小产品单元,包含多种可选规格的某种商品的集合。iphone 6 就是一个SPU

SKU:最小库存单元,不可再拆分的产品。 32G的黑色的iphone6就是一个SKU

在这里插入图片描述

4、商品相关整体

在这里插入图片描述

表名备注
pyg_admin后台管理员表
pyg_role后台角色表
pyg_auth后台权限表
pyg_category商品分类表
pyg_brand商品品牌表
pyg_goods商品表(SPU表)
pyg_goods_images商品相册表
pyg_attribute商品属性表
pyg_spec商品规格名称表
pyg_spec_value商品规格值表
pyg_spec_goods规格商品表(SKU表)
pyg_cart购物车表
pyg_order订单表
pyg_order_goods订单商品表
pyg_pay_log支付记录表
pyg_user前台用户表
pyg_type商品模型表
pyg_address收货地址表

十三、文件上传

2、多图片上传

定义路由

创建控制器方法

图片上传

返回数据

实现:

定义路由

在这里插入图片描述

创建控制器方法,上传图片

在这里插入图片描述

在这里插入图片描述

测试:

在这里插入图片描述

十四、商品品牌管理

修改数据表: 在mysql中执行以下命令,对品牌表的desc字段设置可以为空。

ALTER TABLE `pyg_brand`
MODIFY COLUMN `desc`  text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '品牌描述' AFTER `logo`;

1、商品品牌列表

定义路由

创建控制器方法

查询数据

返回数据(分页+搜索列表、分类下的品牌列表)

实现:

定义路由

在这里插入图片描述

创建控制器方法

在这里插入图片描述

创建模型

在这里插入图片描述

分类下品牌、分页+搜索品牌列表

在这里插入图片描述

在这里插入图片描述

2、商品品牌详情

定义路由

创建控制器方法

查询数据

返回数据

实现:

在这里插入图片描述

3、商品品牌新增

定义路由

创建控制器方法

接收数据

参数检测

添加数据

返回数据

实现:

在这里插入图片描述

在这里插入图片描述

将商品分类新增接口中 也进行生成缩略图的处理。

在这里插入图片描述

4、商品品牌修改

定义路由

创建控制器方法

接收数据

参数检测

修改数据

返回数据

实现:

在这里插入图片描述

在这里插入图片描述

5、商品品牌删除

删除数据

返回数据

实现:品牌下有商品 则不让删除

在这里插入图片描述

十五、连表查询与关联模型

关联模型 见手册 - 模型 - 关联 (一对一关联,一对多关联,关联预载入)

1、连表查询

需求:查询所有商品品牌信息及其所属的分类名称

连表查询一个品牌以及分类名称
SELECT t1.*,t2.cate_name FROM `pyg_brand` t1 left join pyg_category t2 on t1.cate_id = t2.id where t1.id = 1;
连表查询所有品牌以及对应的分类名称
SELECT t1.*,t2.cate_name FROM `pyg_brand` t1 left join pyg_category t2 on t1.cate_id = t2.id;

对应框架中的代码:

连表查询一个品牌以及分类名称
$info = appcommonmodelBrand::alias('t1')
            ->join('pyg_category t2', 't1.cate_id=t2.id', 'left')
            ->field('t1.*, t2.cate_name')
            ->where('t1.id', 1)
            ->find();
连表查询所有品牌以及对应的分类名称
$list = appcommonmodelBrand::alias('t1')
                ->join('pyg_category t2', 't1.cate_id=t2.id', 'left')
                ->field('t1.*, t2.cate_name')
                ->select();

转化为数组形式的结果:

$info = ['id' => 1, 'name' => '华为',..., 'cate_name'=>'手机'];

$list = [
 	['id' => 1, 'name' => '华为',..., 'cate_name'=>'手机'];
  	['id' => 2, 'name' => '小米',..., 'cate_name'=>'手机'];
];

2、一对一关联

新增管理员档案表pyg_profile,保存每个管理员的详细信息(身份证号、银行卡号)。

CREATE TABLE `pyg_profile` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户id',
  `idnum` varchar(30) DEFAULT NULL COMMENT '身份证号',
  `card` varchar(255) DEFAULT NULL COMMENT '银行卡号',
  `create_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  `delete_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

添加测试数据

INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('1', '1', '232332198008083321', '421656421254789', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('2', '2', '435332198108083312', '521656421254777', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('3', '3', '655332198108083357', '681656421254787', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('4', '4', '987067198208083734', '843123421257829', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('5', '5', '657067198408083256', '753623421259523', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('6', '6', '746067198608089463', '534623421259125', '1520408547', '1520408547', NULL);
INSERT INTO `pyg`.`pyg_profile` (`id`, `uid`, `idnum`, `card`, `create_time`, `update_time`, `delete_time`) VALUES ('7', '7', '745367198708089414', '514623426449165', '1520408547', '1520408547', NULL);

创建模型

php think make:model common/Profile

1)关联查询

需求:查询管理员信息及其档案信息

①定义关联关系

档案表pyg_profile中的uid对应于管理员表中的id

以管理员表为主,一个管理员有一个档案,管理员模型中定义关联关系:

//定义管理员-档案关联关系
public function profile()
{
	return $this->hasOne('Profile', 'uid', 'id');
}

注:方法名,一般和关联的模型名对应,采用首字母小写的驼峰命名法。

return $this->hasOne(关联model,关联model的联系键,本model的联系键);

第二个参数,可选,默认为 本模型名_id

第三个参数,可选,默认为id

在这里插入图片描述

②查询数据

需求:查询管理员数据时,也要查询档案数据

控制器中

$info = appcommonmodelAdmin::with('profile')->find(1);
dump($info);
$data = appcommonmodelAdmin::with('profile')->select();
dump($data);

在这里插入图片描述

2)定义相对的关联

需求:查询档案信息及管理员信息

档案表pyg_profile中的uid对应于管理员表中的id

以档案表为主,一个管理员有一个档案,管理员模型中定义关联关系:

//定义管理员-档案关联关系
public function admin()
{
	return $this->belongsTo('Admin', 'uid', 'id');
}

注:方法名,一般和关联的模型名对应,采用首字母小写的驼峰命名法。

return $this->hasOne(关联model,关联外键,关联主键);

第二个参数,可选,默认为 模型名_id

第三个参数,可选,默认为id

在这里插入图片描述

②查询数据

需求:查询档案数据时,也要查询管理员数据

控制器中

$info = appcommonmodelProfile::with('admin')->find(1);
dump($info);
$data = appcommonmodelProfile::with('admin')->select();
dump($data);

在这里插入图片描述

3、一对多关联

1)关联查询

需求:查询商品分类及其下的商品品牌信息

①定义关联关系

品牌表中的cate_id对应于分类表中的id

以分类表为主,一个分类下有多个品牌,分类模型中定义关联关系:

//定义分类-品牌关联关系
public function brands()
{
	return $this->hasMany('Brand', 'cate_id', 'id');
}

注:方法名,一般和关联的模型名对应,采用首字母小写的驼峰命名法,取复数形式。

return $this->hasMany(关联model,关联外键,关联主键);

第二个参数,可选,默认为 模型名_id

第三个参数,可选,默认为id

在这里插入图片描述

②查询数据

需求:查询分类数据时,也要查询其下的品牌数据

控制器中

$info = appcommonmodelCategory::with('brands')->find(72);
dump($info);
$data = appcommonmodelCategory::with('brands')->select();
dump($data);

在这里插入图片描述

2)定义相对的关联

需求:查询商品品牌及其所属的商品分类信息

品牌表中的cate_id对应于分类表中的id

以品牌表为主,一个品牌属于一个分类,品牌模型中定义关联关系:(和一对一的相对关联,语法一模一样)

//定义品牌-分类关联关系
public function category()
{
	return $this->BelongsTo('Category', 'cate_id', 'id');
}

注:方法名,一般和关联的模型名对应,采用首字母小写的驼峰命名法。

return $this->BelongsTo(关联model,关联外键,关联主键);

第二个参数,可选,默认为 模型名_id

第三个参数,可选,默认为id

在这里插入图片描述

②查询数据

需求:查询查询商品品牌信息时,也要查询及其所属的商品分类数据

控制器中

$info = appcommonmodelBrand::with('category')->find(1);
dump($info);
$data = appcommonmodelBrand::with('category')->select();
dump($data);

在这里插入图片描述

4、绑定属性到父模型

hasOne() 和belongsTo方法后面,调用bind方法,可将属性绑定到父模型中。

注:hasMany方法后不能调用bind方法。

比如,品牌模型中:将分类名称cate_name绑定到品牌模型数据中

public function category()
{
	return $this->BelongsTo('Category', 'cate_id')->bind('cate_name');
}

控制器中

$info = appcommonmodelBrand::with('category')->find(1)->toArray();
dump($info);

结果结构如下: cate_name和品牌信息属于同一级

$info = ['id'=>1, 'name'=>'华为', 'cate_name'=>'手机'];

对比绑定之前:

$info = ['id'=>1, 'name'=>'华为', 'category'=>['cate_name'=>'手机']];

十六、商品模型(类型)管理

1、商品模型列表

定义路由

创建控制器方法

查询数据

返回数据

实现:

定义路由

在这里插入图片描述

创建控制器方法,继承BaseApi

在这里插入图片描述

在这里插入图片描述

创建模型

在这里插入图片描述

查询数据

在这里插入图片描述

2、商品模型详情

定义路由

创建控制器方法

查询数据

返回数据

实现:

创建模型(规格名称模型、规格值模型、属性模型)

在这里插入图片描述

定义关联模型

在这里插入图片描述

在这里插入图片描述

查询数据

在这里插入图片描述

3、商品模型删除

删除数据

返回数据

注:事务操作 见手册-数据库-事务操作

在这里插入图片描述

实现:

商品类型下有商品,则不能删除

删除了商品类型,类型下的规格名、规格值、属性都可以删除了。

普通的删除:

在这里插入图片描述

使用事务操作进行删除:

在这里插入图片描述

在这里插入图片描述

最后

以上就是畅快天空为你收集整理的13.pyg04-多图上传及品牌管理,关联查询品优购电商项目04商品相关数据表十三、文件上传十四、商品品牌管理十五、连表查询与关联模型十六、商品模型(类型)管理的全部内容,希望文章能够帮你解决13.pyg04-多图上传及品牌管理,关联查询品优购电商项目04商品相关数据表十三、文件上传十四、商品品牌管理十五、连表查询与关联模型十六、商品模型(类型)管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部