Laravel에서 created_at만 사용하는 방법
created_at만 사용하고 싶은데 어떻게 해야 하나요?
알고 있습니다.
타임스탬프 이름을 커스텀할 수 있습니다.
const CREATED_AT = 'created';
const UPDATED_AT = 'updated';
그러면 타임스탬프가 비활성화됩니다.
public $timestamps = false;
할 수 있는 이 있는 것은 , 수 .만만만, 이이이이직직 , ,,creating
다음 중 하나:
class User extends Eloquent {
public $timestamps = false;
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->created_at = $model->freshTimestamp();
});
}
}
맨 위에 사용:
const UPDATED_AT = null;
또한 'created_at' 필드에는 다음을 사용할 수 있습니다.
const CREATED_AT = null;
LARAVEL 5.5.0 - 5.5.5 업데이트
이 문제는 Larabel 5.5.0에서 해결되었습니다(5.5.5에서 다시 해결).
5.5.x 를 사용하고 있는 경우는, 최신 버전을 사용해 주세요.
어떤 이유로 인해 최신 버전을 사용할 수 없는 경우 다음 해결 방법이 있습니다.
public $timestamps를 false로 설정합니다.
public $timestamps = false;
필요한 경우:
public function setCreatedAtAttribute($value) {
$this->attributes['created_at'] = \Carbon\Carbon::now();
}
또는
public function setUpdatedAtAttribute($value) {
$this->attributes['updated_at'] = \Carbon\Carbon::now();
}
"created_at" 및 "updated_at" 두 개의 필드가 필수인 경우 물론 아무것도 수행할 필요가 없습니다.
Larabel 5.2 이상에 대한 더 나은 답변이 있습니다.
이것을 모델에 사용할 수 있습니다.
class User extends Model
{
public $timestamps = false; // disable all behavior
public $timestamps = true; // enable all behavior
public $timestamps = [ "created_at" ]; // enable only to created_at
public $timestamps = [ "updated_at" ]; // enable only to updated_at
public $timestamps = [ "created_at", "updated_at" ]; // same as true, enable all behavior
}
그래서, 당신의 질문에 대한 답은...
public $timestamps = [ "created_at" ]; // enable only to created_at
재작성하다
public $timestamps = [ "created_at" ];
Larabel 6+에서는 동작하지 않는다.
솔루션:
class CreatePostsTable extends Migration {
public function up() {
Schema::create('posts', function(Blueprint $table){
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
});
}
난 이거면 돼
Larabel 5.* 이후
모델:
// Disable updated_at (only created_at)
class Book extends Model
{
const UPDATED_AT = null;
/* ... */
}
이행:
Schema::create('books', function (Blueprint $table): void {
/* ... */
$table->timestampTz('created_at')->nullable();
});
요.CURRENT_TIMESTAMP
컬럼의 "My database" ()created_at
제 하고 있습니다.
public $timestamps = false;
protected $dates = ['created_at'];
나는 이 방법이 모든 버전의 라라벨에서 효과가 있기를 바란다.
★★★★★★★★★★★★★★★★★★★★★★★에model
설정하다
const UPDATED_AT = null;
또는
const CREATED_AT = null;
Laravel이 updated_at/created_at 필드의 갱신을 시도하지 않도록 합니다.
Laravel 5.8에 대응합니다.
.setUpdatedAt
안에서model
public function setUpdatedAt($value) : self
{
// Do nothing.
return $this;
}
는 이 체크가 짧기 때문입니다.또, 「」의 때문입니다.if (! is_null(static::UPDATED_AT)
것은, 「 」를 트리거 에.setUpdatedAt
updated_at만 비활성화하려면 다음과 같이 Model::setUpdatedAt() 메서드를 덮어씁니다.
public function setUpdatedAt($value) {
// Do nothing.
}
물론 created_at 열에 대해 이 작업을 수행하는 경우에도 간단합니다.그게 라라벨 5.1의 작업입니다.
5. 5.3을 .public $timestamps = false;
그런 다음 protected $fillable = ['created_at']를 추가합니다.주의: 원하는 것을 추가할 수 있습니다.테이블에 있는 것과 일치하는지 확인해 주세요.
저의 은 새로운 입니다.__construct
★★★★★★ 。
참조:
class MyModel extends Eloquent {
public $timestamps = false;
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->attributes['created_at'] = $this->freshTimestamp();
}
}
「 」으로 .setUpdatedAt
5.1하지 않았습니다.왜냐하면 Laravel 5.1.7이 있는 더 입니다.이치노라라벨 5.1.7입니다.updated_at
리됩니니다다
모델 클래스 performUpdate 메서드가 Builder 클래스 메서드를 호출합니다.
public function update(array $values)
{
return $this->query->update($this->addUpdatedAtColumn($values));
}
그 결과,
return Arr::add($values, $column, $this->model->freshTimestampString());
를 두 번 Larabel에서.performUpdate
$this->updateTimestamps()
후 Builder에서 "Builder"를 합니다.$this->addUpdatedAtColumn($values)
.
디버깅을 해보니 getUpdatedAtColumn 덮어쓰기로 모델도 업데이트해야 합니다.처음에는 존재하지 않는 필드 "null"을 업데이트하려고 할까 봐 걱정했는데 알고 보니Arr::add
null 키를 무시할 정도로 스마트합니다.
따라서 모델 클래스에 다음 항목을 추가합니다.
public function setUpdatedAt($value)
{
// Do nothing.
}
public function getUpdatedAtColumn()
{
return null;
}
이것으로, 양쪽의 업데이트를 무효로 할 수 있습니다.
맨 위에서 클래스 사용:
const UPDATED_AT = null;
또는
const CREATED_AT = null;
단순하고 분리되며 재사용 가능한 솔루션은 모델 옵서버를 사용하는 것입니다.이 아이디어는 이 모든 것을creating
이벤트 및 채우기created_at
기여하다.이 방법은 코드를 반복하거나 비공식적인 방법을 사용하지 않고도 다양한 모델에서 사용할 수 있습니다.가장 중요한 것은 모델 클래스의 내부 메커니즘과 매우 유사하기 때문에 예상치 못한 오류를 방지할 수 있다는 점입니다.
1) 작성SetCreatedAt
을 관찰하다.App\Observers
:
namespace App\Observers;
use Illuminate\Database\Eloquent\Model;
class SetCreatedAt
{
/**
* Sets created_at when creating the model.
*
* @param Model $model
* @return void
*/
public function creating(Model $model)
{
$model->setCreatedAt($model->freshTimestamp());
}
}
2) 온App\Providers\AppServiceProvider
내부boot
method를 사용하여 원하는 각 모델에 대해 다음 행을 추가합니다.created_at
생성 대상:
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// Replace OrderLog with your model
OrderLog::observe(SetCreatedAt::class);
}
3) 모델에서는 타임스탬프를 비활성화하기만 하면 됩니다.
// Disable timestamps on the model
public $timestamps = false;
Larabel 5.3에서 테스트했지만 이전 버전에서도 동작합니다.
행운을 빕니다.
Larabel 5.7에서는 이 정도면 충분했습니다.
이행 시:
$table->timestamp('created_at')->nullable();
클래식 대신$table->timestamp('created_at');
모델 내:
const UPDATED_AT = null;
5.4에서는 업데이트 후에도 updated_at 필드(Eloquent 업데이트)가 채워지지 않는 문제가 발생합니다.
대신 이 메서드를 추가합니다.
public function setUpdatedAtAttribute($value)
{
// auto disable update_at in inserts
}
여기 계신 분들을 위해updated_at
가 아니라created_at
하지만 다른 답변은 전혀 도움이 되지 않는 것 같습니다.
Laravel 8에서는 모델 속성을 설정해야 합니다.CREATED_AT
로.null
및 그UPDATED_AT
'supdated_at' 또는 updated_at 필드에 추가할 다른 이름을 지정합니다.
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The name of the "created at" column.
*
* @var string|null
*/
const CREATED_AT = null;
/**
* The name of the "updated at" column.
*
* @var string|null
*/
const UPDATED_AT = 'updated_at';
public function setCreatedAt($value)
{
// do nothing
}
}
이행은...
Schema::create('users', function (Blueprint $table) {
// ...
$table->timestamp('updated_at'); // instead of $table->timestamps();
});
이 속성은 이미 상위 클래스에 설정되어 있으므로 모델 내에서 설정해야 하는 이유를 알 수 없습니다.Illuminate\Database\Eloquent\Model
하지만 이 변경을 한 후에야 효과가 있었습니다.
CURRENT_TIMESTamp 기본값을 다음에 사용할 수 있습니다.created
MySQL 테이블 및 세트의 필드
public $timestamps = false;
를 선택합니다.
매우 간단한 해킹을 사용했어요;)
클래스 MyClass는 모델 {을(를) 확장합니다.
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'creation_date';
}
양쪽을 같은 컬럼으로 가리켰을 뿐입니다.
언급URL : https://stackoverflow.com/questions/29886497/how-to-only-use-created-at-in-laravel
'programing' 카테고리의 다른 글
양식이 중앙에 정렬되지 않았습니다(수직 중앙/중앙). (0) | 2022.09.14 |
---|---|
Vue.js v2의 자 컴포넌트 동적 렌더링 (0) | 2022.09.14 |
알 수 없는 사용자 지정 요소? (0) | 2022.09.14 |
Getters, setters 및 properties의 베스트 프랙티스.자바와C# (0) | 2022.09.14 |
팬더 데이터 프레임에 누락된 날짜 추가 (0) | 2022.09.14 |