Saya mengalami kesalahan ini dan tidak ada hasil googling yang saya periksa yang mirip dengan masalah saya.
Saya memiliki aplikasi dengan kelas Deal, User, dan Matches
Kesepakatan memiliki banyak kecocokan. Seorang pengguna memiliki banyak kecocokan. Seorang pengguna memiliki banyak kesepakatan.
Saya mencoba untuk membuat Match baru menggunakan objek Deal saya
$deal->matches()->create(['user_id'=>$id]);
Ini adalah kelas pertandingan saya, saya telah mendefinisikan semua hubungan yang dibutuhkan
class Match extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $guarded = [];
public $timestamps = false;
public $expired_on = "";
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->matched_on = $model->freshTimestamp();
});
}
public function __construct(){
$d = (new \DateTime($this->matched_on))->modify('+1 day');
$this->expired_on = $d->format('Y-m-d H:i:s');
}
/**
* Get the user that owns the match.
*/
public function user()
{
return $this->belongsTo('App\User');
}
/**
* Get the deal that owns the match.
*/
public function deal()
{
return $this->belongsTo('App\Deal');
}
}
Dan saya terus mendapatkan kesalahan ini ketika saya mencoba membuat pertandingan baru.
QueryException di Connection.php baris 647: SQLSTATE[HY000]: Kesalahan umum: 1364 Field 'user_id' doesn't have a default value (SQL: insert into
matches
(deal_id
) values (1))
Saya telah menjaga agar array saya menjadi array kosong, apa yang bisa menjadi masalah?
Hapus larik terjaga
dan tambahkan terisi
sebagai gantinya:
protected $fillable = ['user_id', 'deal_id'];
Alexey Mezenin's Jawabannya benar dan bagus.
Cara lain yang saya gunakan untuk mengatasinya, bagi mereka yang ingin mempertahankan larik kosong yang dijaga adalah dengan membuat objek Match baru dan memasukkan atribut dan menyimpannya.
$match->user_id = $id;
$match->deal_id = $deal->id;
$match->matched_on = $match->freshTimestamp();
$match->save();