Laravel:无法添加记录多对多关系

Posted

技术标签:

【中文标题】Laravel:无法添加记录多对多关系【英文标题】:Laravel: Unable To Add Record Many to many Relationship 【发布时间】:2020-05-11 06:03:31 【问题描述】:

我想使用 Laravel 6 的多对多关系添加记录。 我有一个用户,他可能有很多角色,比如管理员、博主等

这是我在用户模型中的功能

public function roles()

    return $this->belongsToMany(
        'App\Role', 'user_roles', 'user_id', 'role_id', 'id'
    );

这是表单提交后的请求数据

array:5 [▼
    "_token" => "asdnkasdjisajdmasnduajid"
    "email" => "admin@admin.com"
    "roles" => array:2 [▼
        0 => "2"
        1 => "3"
    ]
]

我已经尝试过这种方法来保存我的记录

$users = [
    'name'     => $request->name,
    'email'    => $request->email,
    'password' => bcrypt($request->password),
    'status'   => 'active',
];
$user = User::create($users);

if ($user) 
    $role = $user->roles()->attach($request->roles);
    if (!$role) 
        Session::flash('error', "Unable to create Role at this moment");

        return redirect()->back();
    
    Session::flash('status', 'User Created Successfully');

    return redirect()->back();

我来了

此时无法创建角色

【问题讨论】:

您的if (!$role) 将始终评估为true,因为attach() 不会返回任何内容。 傻我!非常感谢 【参考方案1】:

多对多关系doesn't return anything 的attach() 方法。 因此,即使角色已成功附加到用户,您的角色变量也将始终为空。

试试这个:

$users = [
    'name'     => $request->name,
    'email'    => $request->email,
    'password' => bcrypt($request->password),
    'status'   => 'active',
];

$user = User::create($users);

if (!$user instanceof User) 
    Session::flash('error', "Unable to create User at this moment");
    return redirect()->back();


$user->roles()->attach($request->roles);

if (!$user->roles) 
    Session::flash('error', "Unable to create Role at this moment");
    return redirect()->back();


Session::flash('status', 'User Created Successfully');
return redirect()->back();

【讨论】:

非常感谢。傻我忘记了 @HamzaAfzal 这回答了你的问题吗?

以上是关于Laravel:无法添加记录多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:无法在视图中显示多对多关系

在 Laravel 中填充具有多对多关系的表

Laravel 多对多关系查询

使用 Laravel 限制多态多对多关系中的相关记录

如何在laravel中从多对多关系中检索多个记录

Laravel:无法显示多对多的关系