tp框架关联表实现添加:

设计表:

分为供应商 和 银行卡表:

(注:如果在实现添加的时候,根据产品提供需求实现  没有特定规定可以分为两个添加页面去实现 简单方便,非规定一个页面实现添加也可以咯  接下来 开始进入海洋的世界~~~~~~)

 

 

 

产品需求同页面实现两表添加:

 

 

控制器代码:

复制代码
/**
     * 添加
     * @return array|mixed
     */
    public function add()
    {
        $this->view->engine->layout(false);
        $storeModel = new StoreModel();
        if (Request::isPost()) {
            return $storeModel->addData(input('param.'));
        }
        return $this->fetch('add');
    }
复制代码

模型层代码:

复制代码
/**
     * 供应商添加
     * @param array $data
     * @return array
     */
    public function addData($data)
    {
        $result = ['status' => true, 'msg' => '保存成功', 'data' => ''];
        $validate = new Validate($this->rule, $this->msg);
        //银行卡数据
        $newData = [
            'bank_name' => $data['bank_name'],
            'card_number' => $data['card_number'],
            'account_bank' => $data['account_bank'],
            'account_name' => $data['account_name']
        ];
//银行卡表:只添加银行卡数据 在添加完之后银行卡主键id就有啦,在这个时候 可以把拿到的银行卡主键id 返回给供应商表里的银行卡id
//如果在添加供应商信息时,没有给银行卡字段添加 这个时候就需要做出判断 不能让给银行卡添加一条空数据的
if (!empty($data['bank_name']) && !empty($data['card_number']) && !empty($data['account_bank']) && !empty($data['account_name'])) { //添加绑定銀行卡数据 并获取当前银行卡添加数据的主键id $storeId = $this->getLastInsID(UserBankcardsModel::insert($newData)); //getLastInsID获取最近插入的ID //添加供应商并组装供应商数据 $data = [ 'store_name' => $data['store_name'], 'category' => $data['category'], 'mobile' => $data['mobile'], 'status' => $data['status'], 'audit' => $data['audit'], 'firm_name' => $data['firm_name'], 'firm_address' => $data['firm_address'], 'img' => $data['img'], 'name' => $data['name'], 'password' => $data['password'], 'url' => $data['status'], 'bankcards_id' => $storeId, ]; $storeAdd = Store::insert($data); if (!$validate->check($data)) { $result['status'] = false; $result['msg'] = $validate->getError(); } } else { //只添加供应商的数据 $storeAdd = $this->allowField(true)->save($data); } return $result; }
复制代码

 

 

tp框架关联表实现修改:

控制器代码:

复制代码
public function edit()
    {
        $this->view->engine->layout(false);
        //供应商
        $storeModel = new StoreModel();
        if (Request::isPost()) {
            return $storeModel->editData(input('param.'));
        }
        $data = $storeModel->where('id', input('param.id/d'))->find();
        //银行卡
        $UserBankcardsModel = new UserBankcardsModel();
        //查询供应商表里的银行卡id
        $userbank = $UserBankcardsModel->where('id', $data['bankcards_id'])->find();
        //在修改的时候 页面银行卡参数会出现为空的情况  如果他为空 则返回空
        if (empty($userbank)) {
            $userbank = [
                'bank_name' => '',
                'card_number' => '',
                'account_bank' => '',
                'account_name' => '',
            ];
        }
        if (!$data || !$userbank) {
            return error_code(10002);
        }

        return $this->fetch('edit', ['info' => $data, 'bankcardsId' => $userbank]);
    }
复制代码

 模型层代码:

复制代码
    public function editData($data)
    {
        $result = ['status' => true, 'msg' => '保存成功', 'data' => ''];
        $validate = new Validate($this->rule, $this->msg);
        if (!empty($data['bank_name']) && !empty($data['card_number']) && !empty($data['account_bank']) && !empty($data['account_name'])) {
            $storeId = Store::where('id', '=', $data['id'])->field('bankcards_id')->find()->toArray();
            //银行卡数据
            $newData = [
                'bank_name' => $data['bank_name'],
                'card_number' => $data['card_number'],
                'account_bank' => $data['account_bank'],
                'account_name' => $data['account_name']
            ];
            //供应商数据
            $data = [
                'id' => $data['id'],
                'store_name' => $data['store_name'],
                'category' => $data['category'],
                'mobile' => $data['mobile'],
                'status' => $data['status'],
                'audit' => $data['audit'],
                'firm_name' => $data['firm_name'],
                'address' => $data['address'],
                'img' => $data['img'],
                'name' => $data['name'],
                'password' => $data['password'],
                'url' => $data['status'],
                'bankcards_id' => $storeId['bankcards_id'],
            ];
            //修改银行卡数据之前先判断供应商所绑定的银行卡id == 0否,如果=0;进行添加银行卡,要不进行修改
            if ($storeId['bankcards_id'] == 0) {
                $bandCardId = $this->getLastInsID(UserBankcardsModel::insert($newData));
                //将成功绑定好的供应商所对应的银行卡id与对应的供应商进行绑定即可
                $storeadd = Store::where(['id' => $data['id']])->update(['bankcards_id' => $bandCardId]);
                $storeadd->getLastSql();
            } else {
                UserBankcardsModel::update($newData, ['id' => $storeId['bankcards_id']]);
            }
            //修改供应商数据
            Store::update($data, ['id' => $data['id']]);

            if (!$validate->check($data)) {
                $result['status'] = false;
                $result['msg'] = $validate->getError();
            }
        } else {
            //只修改供应商的数据
            $this->allowField(true)->save($data, ['id' => $data['id']]);
        }

        return $result;

    }
复制代码

 修改前台页面展示: