Php 使用接口时如何定义关系
Post-User-Image示例很好地介绍了多态关系在Laravel中的正常使用 我试图找到一种干净的方法来实现Article/ContentA/ContentB关系Php 使用接口时如何定义关系,php,laravel,inheritance,laravel-5,Php,Laravel,Inheritance,Laravel 5,Post-User-Image示例很好地介绍了多态关系在Laravel中的正常使用 我试图找到一种干净的方法来实现Article/ContentA/ContentB关系 articles id content_1 id content_2 id user_defined_content_n id contentables article_id contentable_id contentable_type // content_2, user_defined_
articles
id
content_1
id
content_2
id
user_defined_content_n
id
contentables
article_id
contentable_id
contentable_type // content_2, user_defined_content_n
文章不一定知道内容类,因此我不想这样做,而是用许多MorphedByMany
关系定义文章模型
也许我的课程结构不好。我可以创建一个ContentEntity
类,它可以变形为单个Content
类,但如果可能的话,我希望避免这种情况
也许这能更好地解释我的问题
类文章扩展了模型{
公共函数contentEntities(){
返回$this->hasMany(ContentEntity::class);
}
}
类ContentEntity扩展模型{
公共职能可满足(){
返回$this->morphTo();
}
}
类内容扩展模型{
公共函数contentEntity(){
返回$this->morphOne(ContentEntity::class,'contentable');
}
}
类视频扩展模型{
公共函数contentEntity(){
$this->morphOne(ContentEntity::class,'contentable');
}
}
这管用,但我觉得很不干净。我认为管理ContentEntity
父级会增加太多开发人员开销
编辑:
除非有人提供更好的解决方案,否则我使用的是EAV风格的解决方案,使用
ContentEntity
s.您始终可以提取与特征的关系,以便于将来的维护和扩展:
特质
然后,您只需在各种实体中使用该特性:
型号
请发布一些代码,你的
文章
,contentA
和contentB
@MohamedKawsara我认为我添加的表应该有助于澄清我的问题。我已经将其标记为程序员交换,因为它对于SOI来说有点离题如果你不想使用由许多人变形的那么你说你有动态模型?您也在动态地为这些模型创建表?content_1和content_2它们的结构大致相同?如果必须用代码描述这些表,您会说存在Abstract表content and content_1也扩展了content和content_2吗?
trait Contentable
{
public function contentEntity() {
if(property_exists($this, 'contentable') && $contentable == 'many') {
return $this->hasMany(ContentEntity::class);
} else {
return $this->morphOne(ContentEntity::class, 'contentable');
}
}
// Future implementations
}
class Content extends Model {
use Contentable;
}
class Video extends Model {
use Contentable;
}
class Article extends Model {
use Contentable;
protected $contentable = 'many';
}