tp5每日一小练—查询多个表,一对多

创建三表,用来调用,这里用个商品购物的案例来做;
1,购物车表:

DROP TABLE IF EXISTS `bk_car`;
create table `bk_car`(
  `id`mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
  `goodid` mediumint(9) NOT NULL comment'商品id',
  `sizeid` mediumint(9) NOT NULL comment'规格id',
  `number` int(9) NOT NULL comment'商品数量',
  `allprice` int(9) NOT NULL comment'总金额',
  `user_id` mediumint(9) NOT NULL comment'用户id',
  PRIMARY KEY(`id`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

2,商品表:

CREATE TABLE IF NOT EXISTS `bk_commondity` (
  `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
  `title` char(60) NOT NULL COMMENT '商品标题',
  `price` int(9) NOT NULL COMMENT '价格',
  `url` char(120) NOT NULL COMMENT '图片',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

3,规格表:

CREATE TABLE IF NOT EXISTS `bk_size` (
  `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
  `text` char(60) NOT NULL COMMENT '规格',
  `price` int(9) NOT NULL COMMENT '图片',
  `url` char(120) NOT NULL COMMENT '价格',
  `commondityid` mediumint(9) comment'商品id',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

三个表要做到彼此的关联,也就是一对多的关系,
购物车表中商品goodid对应商品表中的id,
购物车中规格sizeid对应规格表中的id,
其实还要对应用户id,这是用户操作要用到的,
所以,先在后台创建一个上传商品的表单提交:

<?php
namespace app\admin\controller;
use app\admin\model\Commondity as CommondityModel;
use app\admin\controller\Common;
class Commondity extends Common{
    public function lst(){
        $kelures=db('commondity')->order('id desc')->paginate(3);
        $this->assign('kelures',$kelures);
        return view();
    }
    public function edit(){
        if(request()->isPost()){
            $data=input('post.');
            $add=new CommondityModel();
            $validate = \think\Loader::validate('Commondity');
            if(!$validate->scene('edit')->check($data)){
                $this->error($validate->getError());
            }
            $save=$add->save($data,['id'=>$data['id']]);
            if($save){
                $this->success('添加成功',url('lst'));
            }else{
                $this->error();
            }
        }
        $kelures=db('commondity')->find(input('id'));
        $this->assign('kelures',$kelures);

        return view();
    }
    public function add(){
        if(request()->isPost()){
            $data=input('post.');
            if(!$validate->scene('add')->check($data)){
                $this->error($validate->getError());
            }
            //添加商品
            $add=db('commondity')->insert($data);
            if($add){
                $this->success('添加成功',url('lst'));
            }else{
                $this->error();
            }
        }
        return view();
    }
    public function del(){
        //删除
        $del=db('commondity')->delete(input('id'));
        if($del){
            $this->success('删除成功',url('lst'));
            }else{
                $this->error();
            }
        }
    

}

模板和验证,模型就不写出来了,上传了一些产品后就可以调用了

$id=input('param.id');

$data=Db::name('car')->alias('c')
                    ->join('__COMMONDITY__ com','c.goodid=com.id ','LEFT')
                    ->join('__SIZE__ s','c.sizeid=s.id','LEFT')
                    ->where(['c.user_id'=>$id])
                    ->field('c.id,c.number,com.price,com.url,com.title,s.text,s.price as size_price')->select();

标签: 无

发表评论:

whatsapp营销