Laravel First或New

Bre*_*ent 4 php laravel eloquent

当我在Laravel中使用UpdateOrNew或FirstOrNew时,我似乎得到了同样的错误,据我所知,我已经正确地实现了代码.

现行守则

    $updateOrCreate = Rating::firstOrNew(
        array(
            'user_id' => Auth::user()->id,
            'video_id' => $_POST['videoId']
            )
    );

    $updateOrCreate->user_id = Auth::user()->id;
    $updateOrCreate->video_id = $_POST['videoId'];
    $updateOrCreate->rating =   $_POST['rating'];

    if($updateOrCreate->save()){
        echo "saved";
    }else{
        echo "failed";
        print_r($_POST);
    };
Run Code Online (Sandbox Code Playgroud)

错误

error: {type:Illuminate\Database\Eloquent\MassAssignmentException, message:user_id,…}
file: "/home/celeb/public_html/dev/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php"
line: 411
message: "user_id"
type: "Illuminate\Database\Eloquent\MassAssignmentException"
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 17

您需要在模型中启用质量分配,如下所示:

class User extends Eloquent {

    protected $fillable = array('first_name', 'last_name', 'email');

}
Run Code Online (Sandbox Code Playgroud)

因此,任何可以批量分配的字段都应该在$ fillable变量中.

分配没有质量分配的值:

$user = new User;
$user->id = 3;
$user->name = "Joe";

$user->save();
Run Code Online (Sandbox Code Playgroud)

使用质量赋值分配值:

$userDetails = array('id' => 3, 'name' => 'Joe');
$user = User::create($userDetails);
Run Code Online (Sandbox Code Playgroud)

  • 质量赋值使用字段值数组来创建记录,而不是一次只做一个字段. (2认同)