programing

Larvel 5.4 필드에 기본값이 없습니다.

powerit 2023. 9. 5. 20:48
반응형

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을 사용하고 있으며 다음 두 단계를 통해 이 오류를 해결했습니다.

  1. 에서 말을 옮기다$guarded에 대한 배열.$fillable사용자 모드의 어레이

  2. 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

반응형