【问题标题】:Laravel - Several related models savingLaravel - 几个相关模型保存
【发布时间】:2017-06-01 15:48:38
【问题描述】:

Laravel 5.4.*

我有以下控制器和功能:

作者控制器

class AuthorController extends Controller {
    public function store(StoreAuthor $request) {
        Author::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

BookController

class BookController extends Controller {
    public function store(StoreBook $request) {
        Book::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

类别控制器

class CategoryController extends Controller {
    public function store(StoreCategory $request) {
        Category::create($request->all());
        return response()->json(["message" => "done"]);
    }
}

还有更多类似的。

我通过 FormRequest 处理验证和安全性,这既简洁又优雅。

之前有人问过我想要实现的目标,但我还没有真正找到适合我的解决方案。

我想发送一个表格并保存许多相关的模型。 我想我会发送一个 json 对象,其中包含所有模型的数据,如下所示:{author:author, book:book, category:category, ....}

我应该创建一个不同的控制器来处理多个模型的逻辑吗?如果是这样,我如何避免在原始控制器中重复逻辑?

我是否应该为每个控制器创建一个可以为其他控制器保存的特征(即:AuthorTrait)?如果是这样,我如何保留 formRequest 验证和策略逻辑?

我见过 laravel 方法 associateattach,但它们似乎只有在已经创建记录的情况下才有效。

我首先想到的是链接不同的控制器方法,但这对我来说似乎真的很不干净。

谢谢。

【问题讨论】:

    标签: php laravel model controller eloquent


    【解决方案1】:

    在我看来,您想创建一个处理这些问题的服务。我会说一般来说你觉得链接不同的控制器方法绝对不是处理这个问题的方法。您基本上需要一个服务来检查请求数据并适当地保存它们。

    在您的控制器中:

    class AuthorController extends Controller {
        public function store(StoreAuthor $request, CustomService $service) {
            return $service->execute($request);
        }
    }
    

    此服务将处理解析和验证数据的逻辑。

    【讨论】:

    • 这很酷,但是我要如何保存一个类别、一个作者和一本书,只需要客户的一个请求呢?想象一下我用{category:category, author:author,book:book.....}做了一个$post
    • @Enrico 我已经用我的处理方式编辑了我的帖子。
    • 我不确定这是否真的会帮助我,但无论如何感谢您的帮助。我想我会使用对不同控制器的异步 ajax 调用,并相应地更新客户端数据。
    猜你喜欢
    • 2021-12-31
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多