Laravel 8 无法在某个表中插入或更新数据

Posted

技术标签:

【中文标题】Laravel 8 无法在某个表中插入或更新数据【英文标题】:Laravel 8 Cannot Insert Or Update Data In A Certain Table 【发布时间】:2021-08-31 09:53:05 【问题描述】:

我是 Laravel 的新手,我一直在努力将数据插入到某个表中,hods。该表只有两个字段,一个唯一的 id 和一个名为 user_id 的外键。

下面是Hod 模型的代码:

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Hod extends Model

    use HasFactory;

    protected $table = 'hods';

    protected $primaryKey = 'id';

    protected $fillable = 'user_id';

下面是我希望查询发生的控制器中方法的代码:

    public function createHOD(Request $request)
    
        // Validate Form Input
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email,except,id',
            'password' => 'required|string|min:8|confirmed',
        ]);

        // If Validation Is Successful
        if (!$validator->fails()) 

            // Create User THIS QUERY WORKS FINE    
            $user = User::create([
                'name' => $request->input('name'),
                'email' => $request->input('email'),
                'password' => Hash::make($request->input('password')),
                'user_type' => "HOD"
            ]);

            // Attaching 'HOD' Role To User
            $user->attachRole('HOD');

            // Adding The User To The HOD Table NOT WORKING
            $hod = new Hod();
            $hod->user_id = $user->id;
            $hod->save();

            // TRIED THIS TOO, ALSO NOT WORKING
            DB::table('hods')->insert(
                ['user_id' => $user->id],
            );

            return response()->json(['success' => 'HOD Successfully Created.']);
         else 
            // Return Error Messages
            return response()->json(['error' => $validator->errors()->all()]);
        
    

我正在使用AJAX,下面是处理该方面的代码:


            $("#hodSubmit").click(function(e) 
                e.preventDefault();

                var _token = $("input[name=_token]").val();
                var name = $("input[name=hod_name]").val();
                var email = $("input[name=hod_email]").val();
                var password = $("input[name=hod_password]").val();
                var password_confirmation = $("input[name=hod_confirmation]").val();

                $.ajax(
                    url: " route('createHOD') ",
                    type: 'POST',
                    data: 
                        _token: _token,
                        name: name,
                        email: email,
                        password: password,
                        password_confirmation: password_confirmation
                    ,
                    success: function(data) 
                        if ($.isEmptyObject(data.error)) 
                            $("#hodForm")[0].reset();
                            printSuccessMsg("hod");
                         else 
                            printErrorMsg(data.error, "hod");
                        
                    
                );
            );

如果您需要其他代码或进一步解释,请告诉我。谢谢

【问题讨论】:

【参考方案1】:

将可填充的受保护更改为数组,如文档所说的必须是

 protected $fillable = ['user_id'];

更新: 试试这个

$hod = Hod::create(['user_id' => $user->id]);

【讨论】:

感谢您的回复。我试图这样做,但问题仍然存在。您可能还有其他建议吗?

以上是关于Laravel 8 无法在某个表中插入或更新数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 数据库不会使用 HTML 表单更新

Laravel 8 和 Ajax - 将数据插入表中总是刷新加载

如何在 Laravel 中使用附加或同步方法在数据透视表中插入多个值

SQL中插入数据并更新数据的某个字段

无法将Delphi ADOQuery更新或插入到Excel工作表中

Laravel 6:违反完整性约束:1452无法添加或更新子行:外键约束失败