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

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

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

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

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



답변

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

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

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


답변

이 라인을 모델에 넣으십시오 .

public $timestamps = false;

그리고 그게 다야!


예:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = false;

    //
}

한 작업에서 타임 스탬프를 비활성화하려면 (예 : 컨트롤러에서) :

$post->content = 'Your content';
$post->timestamps = false; // Will not modify the timestamps on save
$post->save();

모든 모델에 대해 타임 스탬프를 비활성화하려면 새 BaseModel파일을 작성 하십시오.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    public $timestamps = false;

    //
}

그런 다음을 사용하여 각 모델을 다음 BaseModel과 같이 확장하십시오 .

<?php

namespace App;

class Post extends BaseModel
{
    //
}


답변

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;