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