Pertanyaan Laravel Pertama Atau Baru


Sepertinya saya mendapatkan kesalahan yang sama saat menggunakan UpdateOrNew atau FirstOrNew in Laravel, sepengetahuan saya, saya telah menerapkan kode dengan benar.

Kode Saat Ini

    $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);
    };

Kesalahan 

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"

4
2017-12-08 12:49


asal


Jawaban:


Anda perlu mengaktifkan penugasan massal dalam model Anda seperti itu:

class User extends Eloquent {

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

}

Jadi setiap bidang yang dapat ditugaskan secara massal harus berada dalam variabel $ fillable.

Menetapkan nilai tanpa penugasan massal:

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

$user->save();

Menetapkan nilai dengan penugasan massal:

$userDetails = array('id' => 3, 'name' => 'Joe');
$user = User::create($userDetails);

16
2017-12-08 12:54



"Anda juga dapat menggunakan metode buat untuk menyimpan model baru dalam satu baris. Contoh model yang dimasukkan akan dikembalikan kepada Anda dari metode. Namun, sebelum melakukannya, Anda perlu menentukan atribut yang dapat diisi atau dijaga pada model, karena semua model Eloquent melindungi terhadap penugasan massal ". [Lihat Dokumentasi Laravel tentang Eloquent Insert, Update, Delete] (http://laravel.com/docs/5.0/eloquent#insert-update-delete)

Itu artinya, hanya metode buat yang dapat melindungi kode Anda dari penetapan massal:

/*$user=*/ User::create(array( 'name' => 'Max', 'email' => 'example@example.com' ));

Saat menggunakan metode buat, Anda menetapkan nama model yang merupakan Pengguna dari contoh di atas. Model ini (biasanya User.php) adalah tempat Anda menetapkan variabel yang dapat ditetapkan secara massal:

protected $fillable = ['name', 'email'];


2
2017-08-18 02:17