【问题标题】:Trying to populate two tables with a pivot between them试图用它们之间的枢轴填充两个表
【发布时间】:2019-09-16 13:29:01
【问题描述】:

我正在尝试在 Laravel 控制器中填充两个通过数据透视表连接的 mySQL 表,这是我的代码目前的样子:

public static function createUser($request)
{
    $user = request()->validate([
        'full_name' => 'required',
        'username' => 'required',
        'password' => 'required|alpha_num',
        'role' => 'required'
    ]);
    $user['password'] = bcrypt($user['password']);
    $user->factory_data()->attach($request->id, ['division_name' => $request->input('division'), 'work_center_name' => $request->input('center')]);
    User::create($user);
}

基本上这段代码试图实现的是:我正在尝试验证前四个字段的输入,对密码使用 bcrypt,然后将其他两个字段的输入附加到要求。我对如何完成这项任务感到很迷茫,此时我从 Laravel 的 Telescope 得到的错误是Call to a member function factory_data() on array。有人可以帮助我或指出我做错了什么吗?提前致谢! 附言我愿意提供解决问题所需的所有代码。

【问题讨论】:

  • 您在经过验证的请求上调用 factory_data,而不是在模型上。更改请求的变量名称或在创建时初始化 $user

标签: mysql laravel pivot-table


【解决方案1】:

只翻转最后两行,不能附加到数组,必须先创建用户

public static function createUser($request)
{
    $validatedData = request()->validate([
        'full_name' => 'required',
        'username' => 'required',
        'password' => 'required|alpha_num',
        'role' => 'required'
    ]);
    $validatedData['password'] = bcrypt($validatedData['password']);
    $user = User::create($validatedData);
    $user->factory_data()->attach($request->id, [
        'division_name' => $request->input('division'),
        'work_center_name' => $request->input('center')
    ]);
}

【讨论】:

  • 哦,我明白我做错了什么。感谢您的帮助,球童!
  • 我必须在创建问题后等待 15-20 分钟才能接受答案,我会尽快完成!再次感谢您编辑您的答案!
  • 谢谢,我没有编辑... @N69S 多亏了他
  • 乐于助人:)
猜你喜欢
  • 2015-03-25
  • 2015-12-29
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多