在 Laravel 中创建基表并从中扩展

瓦卡特

我目前正在尝试在 Laravel 中构建一个非常简单的 CMS,这样我就有了一个基本entities表(和模型),其结构如下:

{
    id: int,
    slug: string
}

以及其他几个表(pagesblogposts等),其结构类似于以下内容:

{
    id: int,
    title: string,
    content: string,
    entity_id: int
}

这个想法是,应用程序获取URL,发现蛞蝓匹配的实体,然后找到相应的PageBlogpost等等。

这是我无法弄清楚如何实现的最后一步。我是否应该model_nameentities表中添加一,以便知道Model要查询哪一我研究了多态关系,但我认为它们不一定是我要寻找的,因为这在很大程度上是一对一的关系。

桑迪什

要回答您的问题,您需要这样做。

在 Page 和 BlogPost 模型中

public function entity()
{
    return $this->hasOne('App\Entity');
}

在实体模型中

public function page()
{
    return $this->belongsTo('App\Page');
}

public function blogPost()
{
    return $this->belongsTo('App\BlogPost');
}

控制器逻辑

$entity = Entity::where('slug', $slug)->firstOrFail();
$page = $entity->page;
$blogPost = $entity->blogPost;

// OR

$page = Page::whereHas('entity', function ($query) use ($slug) {
    $query->where('slug', $slug);
})->get();

$blogPost = BlogPost::whereHas('entity', function ($query) use ($slug) {
    $query->where('slug', $slug);
})->get();

但理想情况下,这是一个糟糕的实现。您应该使用多态关系将页面或博客文章的 id 存储在实体表中。然后在使用 slug 过滤后使用它引用页面或博客文章。

您可以将实体表重命名为 slugs 以使其更有意义。

slugs
    id - integer
    name - string
    slugable_id - integer
    slugable_type - string

这使您无需检查实体是否有页面或博客文章并直接获取相关模型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在Laravel中创建表

来自分类Dev

Laravel创建简单的RelationShip并从其他表获取用户数据

来自分类Dev

如何更新表Laravel中的字段或创建?

来自分类Dev

在Laravel中扩展收藏

来自分类Dev

使用servicestack ormlite动态创建(并从中选择)表

来自分类Dev

找不到基表或视图:1146 laravel中的表

来自分类Dev

如何从文件中读取行并从中创建字典?

来自分类Dev

laravel并从注销中删除重定向

来自分类Dev

将数据按顺序保存在belongsToMany创建的表中并从中读取(最后的解决方案)

来自分类Dev

将数据按顺序保存在belongsToMany创建的表中并从中读取(最后的解决方案)

来自分类Dev

Laravel 中的表状态

来自分类Dev

在Laravel中扩展TCPDF类

来自分类Dev

在Laravel中扩展Validator类

来自分类Dev

在Laravel中扩展TCPDF类

来自分类Dev

在Laravel中扩展Validator类

来自分类Dev

Laravel迁移-未创建表

来自分类Dev

R:展平数据表组并从中创建数据表

来自分类Dev

如何在Laravel 5中创建表迁移

来自分类Dev

根据用户输入在Laravel中创建新表?

来自分类Dev

无法在Laravel 4.2中创建数据库表

来自分类Dev

我无法在 Laravel 5 中创建新表?

来自分类Dev

在 Laravel 中运行迁移后无法创建新表

来自分类Dev

Laravel基表或视图未找到

来自分类Dev

未找到 Laravel 通知基表

来自分类Dev

创建Facebook Session对象并从中登录

来自分类Dev

读取 JSON 文件并从中创建对象

来自分类Dev

在Laravel 5中创建用户

来自分类Dev

创建日期-Laravel中的Carbon

来自分类Dev

在资源路线中创建Laravel