Ошибка Laravel 4 Illuminate \ Database \ Eloquent \ MassAssignmentException

Привет, я уже искал много ответов, но не смог решить эту проблему.

Вот код для моей миграции

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateActiveTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('activations', function($table)
        {
            $table->bigInteger('id')->primary();
            $table->tinyInteger('token');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('activations');
    }
}

Для модели (models / Activation.php)

<?php

class Activation extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'activations';
    protected $guarded = array();
}

И я вызываю таблицу активации вот так.

Activation::create(['id' => 2, 'token' => 1231]);

Серьезно, я понятия не имею, что здесь не так. И я новичок в laravel 4. Надеюсь, что кто-нибудь научит меня, что происходит и как это решить.


person user3478596    schedule 30.03.2014    source источник
comment
Возможный дубликат MassAssignmentException в Laravel   -  person Organic Advocate    schedule 03.12.2015


Ответы (1)


При использовании массового назначения вам необходимо использовать свойство $fillable в вашем Activation классе.

class Activation extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'activations';

    protected $fillable = ['id', 'token'];
}
person Marwelln    schedule 30.03.2014
comment
Попробуйте удалить $ guarded line. Вы действительно хотите назначить идентификатор вручную? - person user2094178; 30.03.2014
comment
есть ли причина для автоматического увеличения идентификатора? пока все, что мне нужно, это ввести собственный идентификатор, я попробовал - person user3478596; 30.03.2014
comment
Это обычное дело при связывании таблиц. Помимо этого, он избегает обеспечения целостности данных на стороне приложения. В вашем случае активация должна иметь автоматически увеличивающийся идентификатор и что-то вроде member_id, которое вы можете связать с клиентской моделью с Eloquent. - person user2094178; 30.03.2014
comment
Я имел в виду модель Member. - person user2094178; 30.03.2014