일일 관계의 변경 내용을 리비전 가능으로 추적 할 수 있습니까? 예 :일대 다 관계가있는 Laravel 리비전 모델
모델 : User : 모델 : 게시물. 사용자 모델은 Venturecraft \ Revisionable \ RevisionableTrait를 사용합니다. 게시물에 hasMany 관계가 있습니다. 게시물이 추가 또는 업데이트 된 경우 해당 게시물이 속한 사용자의 수정 가능 항목으로 추적 할 수 있습니까?
미리 감사드립니다.
일일 관계의 변경 내용을 리비전 가능으로 추적 할 수 있습니까? 예 :일대 다 관계가있는 Laravel 리비전 모델
모델 : User : 모델 : 게시물. 사용자 모델은 Venturecraft \ Revisionable \ RevisionableTrait를 사용합니다. 게시물에 hasMany 관계가 있습니다. 게시물이 추가 또는 업데이트 된 경우 해당 게시물이 속한 사용자의 수정 가능 항목으로 추적 할 수 있습니까?
미리 감사드립니다.
나는 뭔가를 생각해 냈습니다. 그러나 그것은 가장 우아한 해결책이 아니므로 누군가가 나를 청소하도록 도울 수 있다면 좋을 것입니다. 특히 미안해하는 것이 나를 귀찮게합니다.
내 솔루션은 모델이 속한 테이블에 중복을 만듭니다. 이게 당신이 원하는 것인지 모르겠습니다.
가장 먼저해야 할 일은 nullable datetime revision_at
열을 적절한 테이블에 추가하는 것입니다.
특성 자체는 매우 간단합니다. 우리는 boot()
모델을 사용하여 모델 updating
이벤트를 등록합니다. 모델이 업데이트 될 때마다 실행됩니다. 그것이 바로 우리가 필요로하는 것입니다. 왜냐하면 처음으로 모델을 만들 때 개정판을 원하지 않기 때문입니다.
<?php
trait RevisionableTrait {
public static function boot()
{
parent::boot();
static::updating(function($model){
// Grab the original Model and unset the id
// from it, so that we don't get duplicate
// entries when we create a new model.
$attributes = $model->getOriginal();
unset($attributes['id']);
// Next we need to add the date the revision
// was created
$attributes['revision_at'] = new DateTime();
$revision = new static($attributes);
$revision->save();
});
}
}
여기서 우리가 할 수있는 유일한 방법은 새로운 분야가 할당되기 전에 우리가 중복 항목을 작성하지 않도록하기 위해 해제, ID를 원래 모델을 잡아되면, revision_at
필드의 현재 시간을 설정하고 모델을 저장하십시오.
그건 기본적입니다.
게시자가 속한 사용자의 개정판을 통해 추적 할 수 있습니까? 새로운 버전 모델은 여전히 각각의 사용자에 속하기 때문에
이
자동당신이 미세 조정을 할 당신이 모델에 대한 참조가 저장되는 개정을위한 전용 테이블을 만들 수 원하는 경우, 완료 . 그러나 속성을 저장하는 것이 조금 어려워 질 수 있습니다 (어쩌면 직렬화 할 수 있습니다).
또 다른 가능한 개선점은 특성에서 모델의 게터 메소드를 수정하는 것입니다. 예를 들어 all()
은 수정 버전이없는 모델 만 반환합니다. 그런 다음 withRevisions()
메서드를 추가하여 가져옵니다. Laravel이 Soft Deletes를 처리하는 방법을 살펴 본다면 논리를 추출 할 수 있습니다. 그것은 정확히 같습니다.