用于共享功能/字段的Laravel CMS逻辑

时间:2018-07-16 14:28:32

标签: php laravel laravel-5 eloquent

我对Laravel还是很陌生,所以我在为具有多种内容类型的CMS的逻辑而苦苦挣扎。

说我有3种内容类型;食品,书籍和汽车。所有内容类型中的每个项目都有一个名称,URL和几个其他字段。

我可以创建,更新和删除这些资源中的任何一个,并且很可能将相同的代码复制了3次。唯一的区别是创建或更新,因为它们之间的字段名称会有所不同。

我应该为每个控制器复制这些字段/功能,还是在一个地方创建一些共同点?

最初,字段/函数的交叉不会很大,但是,如果我有10种内容类型,并且我想向其中的所有字段添加一个字段,则效率很低,我必须在很多地方更新代码

如果我有一个中央“节点”,其中包含每种内容类型中所有项目的ID和公共字段,则将此链接链接到自定义字段的各个表,当我想要添加,更新或删除公共字段。

我目前有3个控制器,到目前为止只使用了一个控制器,所以我在控制器中具有index()show()edit()函数。

作为测试,我使用php artisan make:model Node -mcr创建了一个Node模型,并简单地扩展了现有Controllers,以便它们扩展了NodeController。只是抛出了这样的错误;

Declaration of App\Http\Controllers\FoodController::show(App\Food$food) should be compatible with App\Http\Controllers\NodeController::show(App\Node $node)

这可能不是解决问题的方法,但是我根本不知道建议的做法。

1 个答案:

答案 0 :(得分:0)

最适合您问题的标准最佳实践是

有一个数据库表,假设表名为node,它将包含所有公共字段,并具有另一个表为categories并将其与node表相关(1 -m)对节点的类型(例如汽车,书籍,食物等)进行分类,并再创建一张表,假设node_meta将根据节点的类型存储所有其他属性, (您可以查看具有类似数据库设计的wordpress CMS数据库ER图。)

多态关系并不是上面另一个用户所说的好主意,它在查询基础数据时有一定的局限性,例如,您无法应用whereHas查询,但仍然没有官方解决方案this problem