插入、更新、删除

2020-11-05  by  

官方链接

数据库和ORM准则

架构定义

  1. 代码可以在Controller书写。前提是他足够的简单和用途单一。如果不符合应当在Business完成。

  2. 普遍适用的验证的代码应当集中在一起,方便写库的代码便捷的调用。

  3. 验证的逻辑通常情况下使用注释验证即可,如果出现注释验证不能满足的情况下,应该在Business中对验证方法进行重写。

可能需要的类依赖

  1. Controller 写法依赖

     use App\Entity\User;
     use PHPZlc\PHPZlc\Abnormal\Error;
     use PHPZlc\PHPZlc\Abnormal\Errors;
     use Symfony\Component\HttpFoundation\Request;
     use Symfony\Component\HttpFoundation\Response;
     use Symfony\Component\Validator\Validator\ValidatorInterface;
    
  2. Business 写法依赖

     namespace App\Business;
       
     use App\Entity\User;
     use PHPZlc\PHPZlc\Bundle\Business\AbstractBusiness;
            
     class UserBusiness extends AbstractBusiness{}
    

插入

  1. Controller 写法

     use Symfony\Component\Validator\Validator\ValidatorInterface;
     use Symfony\Component\HttpFoundation\Request;
        
     public function createUser(ValidatorInterface $validator, Request $request)
     {
         $manager = $this->getDoctrine()->getManager();
    
         $user = new User();
         $user->setName($request->get('name'));
         $user->setIsDisable(true);
         $user->setCreateAt(new \DateTime());
    
         //类注释验证
         if(Errors::validate($validator, $user)){
             $manager->persist($user);
             $manager->flush();
    
             return Responses::success('创建成功');
         }
    
         return Responses::error(Errors::getError());
     }
    
  2. Business 写法

     public function createUser(User $user)
     {
         $user->setCreateAt(new \DateTime());
    
         //类注释验证
         if($this->validator($user)){
             $this->em->persist($user);
             $this->em->flush();
    
             return $user;
         }
    
         return false;
     }
    

编辑

  1. Controller 写法

     use Symfony\Component\Validator\Validator\ValidatorInterface;
     use Symfony\Component\HttpFoundation\Request;
        
     public function updateUser(ValidatorInterface $validator, Request $request)
     {
         $manager = $this->getDoctrine()->getManager();
    
         $user = $this->getDoctrine()->getRepository('App:User')->find($request->get('id'));
    
         $user->setName($request->get('name'));
    
         //类注释验证
         if(Errors::validate($validator, $user)){
             $manager->flush();
                
             return Responses::success('编辑成功');
         }
            
         return Responses::error(Errors::getError());
     }
    
  2. Business 写法

     public function updateUser(User $user)
     {
         //类注释验证
         if($this->validator($user)){
             $this->em->flush();
    
             return true;
         }
    
         return false;
     }
    

删除

  1. Controller 写法

     public function removeUser(Request $request)
     {
         $manager = $this->getDoctrine()->getManager();
    
         $user = $this->getDoctrine()->getRepository('App:User')->find($request->get('id'));
    
         $manager->remove($user);
         $manager->flush();
    
         return Responses::success('删除成功');
     }
    
  2. Business 写法

     public function removeUser(User $user)
     {
         $this->em->remove($user);
    
         $this->em->flush();
    
         return true;
     }
    

更多校验

  1. Controller 写法

    复杂的校验,应该在Business中完成。

  2. Business 写法

     public function validator($class): bool
     {
         if(parent::validator($class)) {
             if($class instanceof User ) {
                 //检查名称是否重复
                 $user = $this->em->getRepository('App:User')->findOneBy(['name' => $class->getName()]);
                 if(!empty($user) && $site->getId() != $class->getId()){
                     Errors::setErrorMessage('用户名称已存在');
                     return false;
                 }
              }
    
              return true;
          }
    
         return false;
     }
    

了解更多

事务与并发

找到错别字了?本文档有什么问题么?分叉并编辑 它 !

CJayhe

谢谢您的赞赏~

使用微信扫描二维码完成支付

抱歉弹框打扰,系统检测到您今日累计浏览时长已达120秒。如果我们的项目对您有帮助,在 关闭窗口之前,希望能够阅读弹框内容,帮助我们变得更好。

一个成功的项目,实现功能只是基础,合理的架构,对资源的调度能力才是灵魂。 PHPZlc, 致力于在Symfony的基础上提供“知行合一”的项目开发方案。

如果您有关切问题和好的想法:

提交

如果您想帮助我们,可以为我们点亮星星,也可以提供资金支持。

您还可以通过以下渠道,关注我们,获取最新的框架动态,帮助项目获取人气,扩大影响力。

开源伙伴招募:https://phpzlc.com/blog/11.html

由于我们无法获取您是否已经是我们的会员了,所以此弹框每日都会弹出一次,关闭