Php 拉威尔第一还是新

Php 拉威尔第一还是新,php,laravel,eloquent,Php,Laravel,Eloquent,在Laravel中使用UpdateOrNew或FirstOrNew时,我似乎遇到了相同的错误,据我所知,我已经正确地实现了代码 当前代码 $updateOrCreate = Rating::firstOrNew( array( 'user_id' => Auth::user()->id, 'video_id' => $_POST['videoId'] ) ); $u

在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);
    };
错误

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"

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

class User extends Eloquent {

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

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

在不指定质量的情况下指定值:

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

$user->save();
$userDetails = array('id' => 3, 'name' => 'Joe');
$user = User::create($userDetails);
使用质量指定指定值:

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

$user->save();
$userDetails = array('id' => 3, 'name' => 'Joe');
$user = User::create($userDetails);
“您也可以使用create方法将新模型保存在一行中。插入的模型实例将从该方法返回给您。但是,在执行此操作之前,您需要在模型上指定可填充或保护属性,因为所有有说服力的模型都可以防止批量分配。”。[参见Laravel关于雄辩插入、更新和删除的文档] ()

这意味着,只有create方法可以保护代码不受批量分配的影响:

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

$user->save();
$userDetails = array('id' => 3, 'name' => 'Joe');
$user = User::create($userDetails);
/*$user=*/user::create(数组)(
“名称”=>“最大值”,
'电子邮件'=>'example@example.com'
));

当使用create方法时,您可以指定模型的名称,该名称是上面示例中的User。此模型(通常为User.php)是分配大量可分配变量的地方:


protected$filleble=['name','email']

你在chrome上查看了回复了吗?我的难题是理解如何将其分配给一个条目是批量分配?批量分配是使用字段值数组来创建记录,而不是一次只做一个字段。我不明白这一点?抱歉,这不是对数据库的有力映射吗?@Brent为了防止意外或恶意分配任何表字段,Eloquent只允许在类属性
$filleble
中定义的字段上赋值。我不明白的是,为什么
firstOrNew
方法会触发批量赋值异常,因为它只是查看数据库,不试图保存任何内容。例如,这段代码究竟为什么要抛出MAE:
$tour=tour::firstOrNew(数组('id'=>$this->request['id'])它所说的基本上是“查看数据库中是否有一行具有该ID,如果有,则返回该行,如果没有,则创建一个具有相关属性的新对象”。它没有保存任何数据,所以什么是该死的问题…我想向上面的人添加评论,而不是像这样回复,但我需要50次重复:\刚到70岁:)