首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同含量类型(Multisite)的Laravel多态性

不同含量类型(Multisite)的Laravel多态性
EN

Stack Overflow用户
提问于 2022-05-04 13:26:56
回答 1查看 133关注 0票数 0

我开始为两种语言(de,en)开发一个小的内容管理系统,这个系统开始变得越来越大。

在这种情况下,我有文章和页面(有点像WordPress,或者实际上就像WordPress)。但我也计划增加更多的内容类型,如评论,课程,教程(累赘),甚至可能是可购买的电子书。

所有这些对象都有一个共同之处,即它们是内容的,因此它们将在前端显示它们的专用urls,比如/post /{slug}表示posts,/{slug}表示页面,/ reviews /{slug}用于评论等等。

在后端,这意味着为这些内容类型提供了一个自动保存和修改系统。

因此,这将留给我们以下选择:

either)

  • Polymorphism

  • 单表继承(我们需要使用许多空值)-- Laravel并不正式支持,但是有一个包。

  • 多表继承(在Laravel

  • 是一种supported

  • CMS解决方案(类似于CMS)中不支持),它基本上分解了元素、条目、字段等的逻辑,另一种方法将是drupal的节点方法--超出了我的范围(我没有6-9个月的时间从每个模型的表上编写一个CMS,并尝试通过使用特性来尽可能多地在模型之间使用逻辑(目前的状态,我不太喜欢它……)。

在googling上搜索了这里的堆栈溢出并查看了其他项目之后,我想到了以下结构:

目录

代码语言:javascript
复制
id
site_id
title
... (some more columns that are shared among all models)
contentable_type
contentable_id

发布

代码语言:javascript
复制
id

页面

代码语言:javascript
复制
id
home

课程

代码语言:javascript
复制
id
name
featured
difficulty
free

因此,这些表将通过belongsTo关系链接到内容表,而内容模型将定义morphable关系。

代码语言:javascript
复制
class Content extends Eloquent {    
    public function contentable(){
        return $this->morphTo();
    }
}
代码语言:javascript
复制
class Post extends Eloquent (or Content) {
    public function content(){
        return $this->morphOne('Content', 'contentable');
    }
}

使用模型意味着您必须始终加载内容关系。

排序和排序必须由联接执行。

当然,在创建时,我们必须首先创建内容类型模型,然后保存它并将其属性化为内容模型。

我以前从来没有用这种(子)逻辑实现过一个系统,我觉得只有一个id的posts表有点奇怪(其他类型的内容(例如,在没有额外列的情况下也是这样),但是我认为这将是解决这个问题的"Laravel方式“,对吗?

我相信STI不适用于这个案子,这也有点违背了Laravel雄辩的模式。

有人已经有这种方法的经验了吗?我在这里走得对吗?

注:我受到以下讨论的启发:How can I implement single table inheritance using Laravel's Eloquent?

EN

回答 1

Stack Overflow用户

发布于 2022-05-12 16:30:09

以防有人发现这个问题。我最终决定不采用这种方法,基本上是因为我认为它不值得付出努力(而且大多数包都无法发挥作用)。

使用特性等来重用尽可能多的逻辑并遵循雄辩的ORM方法是一种更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72113752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档