web-dev-qa-db-ja.com

laravel 5のsave()、create()関数の違い

laravel 5.で使用できるsave()create()関数の違いは何ですか?save()create()を使用できる場所

15
Nikunj K.

_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()メソッドは、新しいモデルの保存と既存のモデルの更新の両方に使用されます。ここでは、新しいモデルを作成するか、既存のモデルを見つけて、そのプロパティを1つずつ設定し、最終的にデータベースに保存します。

  • save()は完全なEloquentモデルインスタンスを受け入れます

    _$comment = new App\Comment(['message' => 'A new comment.']);
    
    $post = App\Post::find(1);`
    
    $post->comments()->save($comment);
    _


create()

  • createメソッドでは、配列を渡し、モデルにプロパティを設定し、データベース内でワンショットで保持します。
  • create()は、プレーンPHP配列を受け入れます

    _$post = App\Post::find(1);
    
    $comment = $post->comments()->create([
        'message' => 'A new comment.',
    ]);
    _

    [〜#〜] edit [〜#〜]
    @ PawelMysiorが指摘したように、createメソッドを使用する前に、値がマス割り当てを介して安全に設定できる列(name、birth_dateなど)を必ずマークするようにしてください。私たちのEloquentモデルは、$ fillableという新しいプロパティを提供します。これは、一括割り当てで安全に設定できる属性の名前を含む単純な配列です。

例:-

_class Country extends Model {

    protected $fillable = [
        'name',
        'area',
        'language',
        ];
}
_
25
Tony Vincent