Laravel一些优雅的写法

  1. 新增操作
php 复制代码
// 原则,所有服务类只有一个public入口,或者多个public入口,但是他们做都是同一件事情
Class CreateService {


    // 创建类的入口, 根据dto去新建
    public function create(Dto $dto){

        // 先构建model对象, 不要在事务期间构建,减少事务等待
        $good = $this->buildGood($designProduct, $dto);
            $good->setRelation('aList', $this->buildAList($dto));
            $good->setRelation('bList', $this->buildBList($dto));


    DB::transaction(function () use (
            $good
        ) {

             // 保存model对象
               // 主表
                $good->save();
                // 主表关联其他表
                $good->aList()->saveMany(
                    $designReference->aList->all()
                );
                // 主表关联其他表
                $good->bList()->saveMany(
                    $designReference->bList->all()
                );
            // 触发事件,要delay延迟事件,确保事务提交后触发
            delay_event(new GoodCreated());
        });

    }


    // 根据product类去新建
    public function createByProduct(Product $product) {
        // build reference
        // save()
   }


    /**
     * @param Dto $dto
     * @return Collection
     */
    protected function buildAList(
        Dto $dto
    ): Collection {
        $newCollection  = new Collection();
        $$list = array_filter_unique(explode(',', $dto->getName()));

        if (empty($list)) {
            return $newCollection;
        }

        foreach ($list as $name) {
            $newCollection->add(new GoodAList([
                'name'    => $name,
            ]));
        }

        return $newCollection;
    }

    protected function buildBList(
        Dto $dto
    ): Collection {
        $newCollection  = new Collection();

        if (!empty($dto->getBName())) {
            $newCollection->add(
                new GoodBList(
                    [
                        'country_name'    => $dto->getBName(),
                    ]
                )
            );
        }

        return $newCollection;
    }


    /**
     * @param Product $product
     * @param Dto $dto
     * @return Good
     */
    protected function buildGood(
        Product $product,
        Dto $dto
    ): Good {
        return new Good([
          
            'updated_at'   => $dto->getDataUpdatedAt(),
            'band_id'   => $product->band_id,
        ]);
    }

}

$service = new CreateService();
$service->create();
相关推荐
bubiyoushang8885 天前
深入探索Laravel框架中的Blade模板引擎
android·android studio·laravel
tianlebest6 天前
Laravel 安全:批量赋值 fillable 与 guarded
数据库·安全·laravel
深山技术宅8 天前
在Laravel 12中实现基于parent_id的树状数组
php·laravel
深山技术宅10 天前
在 Laravel 12 中实现 WebSocket 通信
websocket·php·laravel
深山技术宅10 天前
laravel 12 监听syslog消息,并将消息格式化后存入mongodb
mongodb·php·laravel
深山技术宅14 天前
Laravel 12 实现 API 登录令牌认证
php·laravel
深山技术宅14 天前
Laravel 12 实现 OAuth2 登录
php·laravel
Taichi呀14 天前
Laravel+API 接口
php·laravel
Taichi呀17 天前
Laravel基础
php·laravel
foryoufeng20 天前
Laravel代码生成器,快速构建项目代码,统一团队编码风格
php·laravel