Laravel не может создать модель с Model :: create () и $ model-> save () - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу заполнить таблицу hero, но получаю следующую ошибку.

Аргумент 1, передаваемый в Illuminate \ Database \ Query \ Builder :: insertGetId (), должен иметь типмассив, заданный объект, вызывается в

E: \ xampp \ htdocs \ cyberpunk \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Builder.php в строке 1350.

Исключениеtrace: Illuminate \ Database \ Query \ Builder :: insertGetId (Object (App \ Hero), "id") ... vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Builder.php: 1350

Сеялка

User::find(1)->hero()->create([
    'name' => $faker->userName,
    'level' => $faker->numberBetween(1, 99),
    'strength' => $faker->numberBetween(1, 20),
    'vitality' => $faker->numberBetween(1, 20),
    'stamina' => $faker->numberBetween(1, 20),
    'agility' => $faker->numberBetween(1, 20),
    'perception' => $faker->numberBetween(1, 20),
    'luck' => $faker->numberBetween(1, 20),
]);

У меня отношение один к одному между User и Hero. Я хочу создать новую hero с помощью модели user. Этот способ также вызывает ту же ошибку.

$hero = new Hero;
$hero->user_id = 1;
...
$hero->save();

Пользователь

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

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

    protected $hidden = [
        'password', 'remember_token',
    ];

    public $appends = ['hashid'];

    public function hero()
    {
        return $this->hasOne(Hero::class);
    }
}

Модель героя

class Hero extends Model
{
    protected $fillable = ['level'];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

1 Ответ

0 голосов
/ 01 октября 2019

Проблема в вашем $fillable конфиге. Попробуйте добавить свои поля к $fillable:

class Hero extends Model {

    protected $fillable = ['level', 'client_id', ... ]; // <-- your allowed fields

    public function user() {
        return $this->belongsTo(User::class);
    }
}

Теперь имейте в виду, что это нужно будет применять для большинства ваших полей. Альтернативой является использование противоположного атрибута $guarded. Вы перечисляете там поля, которые вы хотите защитить от массового назначения:

class Hero extends Model {

    protected $guarded = []; // <-- your protected fields go here

    public function user() {
        return $this->belongsTo(User::class);
    }
}

Проверьте связанный раздел документации.

...