【发布时间】:2015-09-15 08:21:41
【问题描述】:
伪代码 - 假设我有模型 Author、Document、Revisions、Editor。
Author hasMany DocumentDocument hasMany RevisionsDocument hasMany @987654330 @(存储在修订表中)
但表结构如下:
作者模型:id、name、email
文档模型:id、author_id、title
修订模型:id、document_id、editor_id、text、saved_at
编辑模型:id、name , email
第一个问题 - 存储修订历史(包括哪个编辑器在哪个时间更改了文本);这是一个理想的结构吗?我希望能够做到$author->documents->where('title', 'Some title')->editor->name;
要从Document 访问Editor - 是否值得直接在Document 构造函数中设置属性:
public function __construct(array $attributes = [] ){
$this->setRawAttributes(
array_merge($this->attributes,
$this->revisions()->orderBy('saved_at', 'desc')->first()->attributesToArray()
)
);
}
或者在模型中使用mutators:
public function getEditorIdAttribute($value){
return $this->revisions()->orderBy('saved_at', 'desc')->first()->editor_id;
}
或者有没有更好的方法来处理更像 Laravel/Eloquent 的修订?
【问题讨论】:
-
许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。
-
我不太确定 - 在尝试了几件事后,我发现只有一个适用于上述情况,我已将其发布为答案。
标签: php mysql laravel laravel-5 eloquent