首页 > 解决方案 > laravel,如何使用控制器存储动作级联保存对象

问题描述

我正在开发一个需要多重身份验证的应用程序,我为仪表板使用了 creative-tim 预设(假设 creative-tim 使用“用户”名称将用户存储在仪表板中)我在上面创建了一个管理表它与 User 表具有一对一的关系,并创建了适当的中间件来限制对我的“仅限管理员”视图的访问,并使用 tinker 创建一个管理员并将其链接到测试所有内容。现在的问题是我想通过注册表自动创建与用户的管理员关系,唯一的问题是,我使用的 creative-tim 模板不遵循 laravel 文档,所以我无法理解而且我不知道如何将“管理员”模型链接到创建的“用户”。

这是数据库/模型的一部分: User(id,name,email,email_verified_at,password,rememberToken,timestamps) Admin(id,user_id,role,timestamps)

他们使用的方式是(显然是存储),但他们使用了 UserRequest 和 User Object,我尝试这样做:

        $Admin = new Admin();
        $Admin->role="Admin";
        $Admin->user_id = $model->id;
        $Admin->save();

这是我找到的原始功能

    public function store(UserRequest $request, User $model)
    {
        $model->create($request->merge(['password' =>Hash::make($request->get('password'))])->all());
  return redirect()->route('user.index')->withStatus(__('User successfully created.'));
    }

标签: phplaravellaravel-5eloquent

解决方案


我实际上找到了问题的解决方案(这不是我的首选)所以我正常创建了一个用户并获得了 id,用它来创建一个管理员,验证后完美运行

public function store(UserRequest $request, User $model)
    {
         //validation parameters

         $item = new User();
        $item->name = request('name');
        $item->email = request('email');
        $item->password = Hash::make(request('password'));
        $item->save();

        $admin = new Admin();
        $admin->user_id = $item->id;
        $admin->role ="SuperAdmin";
        $admin->save();
        return redirect()->route('user.index')->withStatus(__('User successfully created.'));
    }


推荐阅读