Larvel 5.4 필드에 기본값이 없습니다.
이 오류가 발생하고 있으며 제가 확인한 구글 검색 결과 중 제 문제와 유사한 것이 없습니다.
클래스 Deal, User 및 Match가 있는 응용 프로그램이 있습니다.
거래에는 일치하는 항목이 많습니다.사용자는 일치하는 항목이 많습니다.사용자에게는 많은 거래가 있습니다.
Deal 개체를 사용하여 새 Match를 생성하려고 합니다.
$deal->matches()->create(['user_id'=>$id]);
이것은 나의 매치 클래스입니다. 나는 필요한 모든 관계를 정의했습니다.
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');
}
}
그리고 새 일치 항목을 만들 때 이 오류가 계속 발생합니다.
연결에 쿼리 예외가 있습니다.php line 647: SQLSTATE[HY000]:일반 오류: 1364 필드 'user_id'에 기본값이 없습니다(SQL: 에 삽입).
matches
(deal_id
) 값(1)
저는 빈 배열이 되도록 경계하고 있는데, 무슨 문제가 있나요?
제거합니다.guarded
배열 및 추가fillable
대신:
protected $fillable = ['user_id', 'deal_id'];
이전 동작으로 되돌리려면 다음을 업데이트합니다.
config/message.sys
줄서기'strict' => false
당신을 위해.
저의 경우는 고유한 필드였기 때문에 무효화할 수 없었습니다.
저는 빈 시공자가 있어서 문제가 발생했습니다.이유를 아는 사람이 있으면 댓글을 달아주세요.
public function __construct(){
}
주석을 달거나 제거하면 문제가 해결됩니다.
모델에 생성자가 있는 경우 상위 생성자에 대한 호출도 있는지 확인하십시오.
public function __construct( array $attributes = array() ) {
// mandatory
parent::__construct($attributes);
//..
}
그렇지 않으면 다음과 같은 일부 기능이 손상됩니다.Model::create
.
저는 Laravel 8을 사용하고 있으며 다음 두 단계를 통해 이 오류를 해결했습니다.
에서 말을 옮기다
$guarded
에 대한 배열.$fillable
사용자 모드의 어레이Config.database.php:
'strict' => false
의 순서로'mysql'
알렉세이 메제닌의 답은 정확하고 좋은 답입니다.
보호된 빈 배열을 유지하려는 사용자를 위해 사용한 또 다른 방법은 Match 개체를 새로 만들고 속성을 입력하고 저장하는 것입니다.
$match->user_id = $id;
$match->deal_id = $deal->id;
$match->matched_on = $match->freshTimestamp();
$match->save();
이 오류를 방지하는 또 다른 방법은 다음을 포함하는 것입니다.
'false' => false,
구성/다운로드로 이동합니다.mysql 배열 내의 php
데이터베이스를 수동으로 가져오거나 내보낼 때 모든 테이블 설정이 성공적으로 전송되었는지 확인합니다.자동 증분 기본 키를 추가하는 것을 잊으면 Laravel이 값을 채우지 않습니다.
추가AUTO_INCREMENT
나중에 문제를 해결할 것입니다.
나는 이 오류가 있었지만 나의 실수는 수업 모델을 만드는 것이었습니다.
$book = new Book();
이것은 사실이지만,
$book = new Book($request->all());
"config/config.dll"을 변경하면 도움이 되지 않습니다.이 오류가 발생하면 데이터를 데이터베이스로 올바르게 전송하지 않습니다.당신의 컨트롤러에서 당신의 기능을 확인하세요, create() 메소드는 아마도 if 문 같은 것에 의해 차단되고 있을 것입니다. 또는
API인 경우 문제가 발생한 프런트 엔드의 게시 요청을 확인하십시오. 양식이 요청에 올바르게 전달되었는지 확인하십시오.
언급URL : https://stackoverflow.com/questions/43186521/laravel-5-4-field-doesnt-have-a-default-value
'programing' 카테고리의 다른 글
CSS3 선택기: 클래스 이름을 가진 첫 번째 유형? (0) | 2023.09.05 |
---|---|
mariadb 10.3의 해당 mysql 버전 (0) | 2023.09.05 |
PHP에서 정적 메서드를 연결하시겠습니까? (0) | 2023.09.05 |
Try Catch 블록을 사용해야 하는 경우 (0) | 2023.08.26 |
NSUser 기본값으로 배열을 저장하고 읽는 방법을 신속하게 선택할 수 있습니까? (0) | 2023.08.26 |