Programing

Laravel의 Eloquent 타임 스탬프 비활성화

lottogame 2020. 6. 4. 07:52
반응형

Laravel의 Eloquent 타임 스탬프 비활성화


웹 응용 프로그램 중 하나를 CodeIgniter에서 Laravel으로 변환하는 중입니다. 그러나 현재이 모든 것을 이미 수행하는 로깅 클래스가 있으므로 현재 모든 테이블에 updated_at/ created_at필드 를 추가하고 싶지 않습니다 .

내가 설정할 수 있다는 것을 알고 있습니다 $timestamps = false;.

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

그러나 Laravel의 핵심 파일을 변경하지 않거나 모델의 모든 사람이 맨 위에 파일을 갖도록하고 싶습니다. 모든 모델에서 다른 곳에서 이것을 비활성화하는 방법이 있습니까?


public $timestamps = false;모든 모델에서 선언 하거나 BaseModel을 작성하고 정의한 후 모든 모델을 웅변이 아닌 확장해야합니다. Eloquent를 사용하는 경우 피벗 테이블에는 타임 스탬프가 있어야합니다.

업데이트 : Laravel v3 이후 피벗 테이블에서 타임 스탬프가 더 이상 필요하지 않습니다.

업데이트 : $table->timestamps()마이그레이션에서 제거하여 타임 스탬프를 비활성화 할 수도 있습니다 .


public $timestamps = false;모델에 간단히 배치 하십시오.


updated_at 업데이트 만 비활성화해야하는 경우이 방법을 모델에 추가하십시오.

public function setUpdatedAtAttribute($value)
{
    // to Disable updated_at
}

이것은 부모 setUpdatedAtAttribute () 메소드를 대체합니다. created_at는 평소와 같이 작동합니다. created_at 업데이트 만 비활성화하는 방법을 작성할 수있는 것과 같은 방법입니다.


5.5.x를 사용하는 경우 :

const UPDATED_AT = null;

'created_at'필드에는 다음을 사용할 수 있습니다.

const CREATED_AT = null;

최신 버전인지 확인하십시오. (이것은 Laravel 5.5.0에서 중단되었으며 5.5.5에서 다시 수정되었습니다).


웅변 모델 :

class User extends Model    
{      
    protected $table = 'users';

    public $timestamps = false;
}

아니면 단순히 이것을 시도하십시오

$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = 'johndoe@example.com';
$users->save();

앞에서 언급 한 것처럼 기존 모델에서 타임 스탬프를 제거하려는 경우이를 모델에 배치하십시오.

public $timestamps = false;

또한 up()메소드 에서 다음 코드를 사용하여 마이그레이션을 작성 하고 실행하십시오.

Schema::table('your_model_table', function (Blueprint $table) {
    $table->dropTimestamps();
});

당신은 사용할 수 있습니다 $table->timestamps()귀하의 down()롤백을 허용하는 방법.


단지 선언 public당신이에 타임 스탬프 변수 Modelfalse모든 것이 잘 작동합니다.

public $timestamps = false;


이 라인을 모델에 추가하십시오.

기존 변수를 $timestamps true 에서 false로 덮어 쓰기

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */

public $timestamps = false;

함수 setUpdatedAt()getUpdatedAtColumn()모델 재정의

public function setUpdatedAt($value)
{
   //Do-nothing
}

public function getUpdatedAtColumn()
{
    //Do-nothing
}

타임 스탬프를 일시적으로 비활성화 할 수 있습니다

$timestamps = $user->timestamps;
$user->timestamps=false;   // avoid view updating the timestamp

$user->last_logged_in_at = now();
$user->save();

$user->timestamps=$timestamps;   // restore timestamps

참고 URL : https://stackoverflow.com/questions/19937565/disable-laravels-eloquent-timestamps

반응형