【发布时间】:2019-11-30 15:43:12
【问题描述】:
我需要知道 laravel 5 中 save() 和 create() 函数有什么区别。
我们可以在哪里使用save() 和create()?
【问题讨论】:
标签: laravel laravel-5 laravel-5.2
我需要知道 laravel 5 中 save() 和 create() 函数有什么区别。
我们可以在哪里使用save() 和create()?
【问题讨论】:
标签: laravel laravel-5 laravel-5.2
Model::create 是$model = new MyModel(); $model->save() 的简单包装器
查看实现
/**
* Save a new model and return the instance.
*
* @param array $attributes
* @return static
*/
public static function create(array $attributes = [])
{
$model = new static($attributes);
$model->save();
return $model;
}
保存()
save() 方法用于保存新模型和更新 现有的。在这里您正在创建新模型或查找现有模型, 一一设置属性,最后保存到数据库中。
save() 接受一个完整的 Eloquent 模型实例
$comment = new App\Comment(['message' => 'A new comment.']);
$post = App\Post::find(1);
$post->comments()->save($comment);
创建()
create() 接受一个普通的 PHP数组
$post = App\Post::find(1);
$comment = $post->comments()->create([
'message' => 'A new comment.',
]);
编辑
正如@PawelMysior 指出的那样,在使用 create 方法之前,请务必标记其值可以通过批量赋值安全设置的列(例如 name、birth_date 等),我们需要通过提供一个更新我们的 Eloquent 模型名为 $fillable 的新属性。这只是一个数组,其中包含可以通过批量赋值安全设置的属性名称:
例子:-
class Country extends Model {
protected $fillable = [
'name',
'area',
'language',
];
}
【讨论】:
create(),您传递给它的所有属性都必须列在模型的$fillable 属性中。见:laravel.com/docs/master/eloquent#mass-assignment
create() 比save() 更安全?