Laravel - 如何设置 morphOne 关系

2024-04-02

我正在尝试为类别实现一个可变形表,现在我有以下内容。

// Snippet Table
- id
- title
- body

// Post Table
- id
- title
- body

// Category Table
- id
- name

我希望能够将帖子和片段改为只有一个类别,如下所示:

// Categorizable Table
- category_id
- categorizable_id
- categorizable_type

我是否必须为这个可分类表建立另一个模型?或者有没有其他模型可以设置的方法?

到目前为止我有这个

class Snippet extends Model
{
    public function category()
    {
        return $this->morphOne(Category::class, 'categorizable');
    }
}

class Post extends Model
{
    public function category()
    {
        return $this->morphOne(Category::class, 'categorizable');
    }
}

class Category extends Model
{
    public function categorizable()
    {
        return $this->morphTo();
    }
}

我有4张桌子,snippets, posts, categories, categorizables,最后一个迁移看起来像这样。

Schema::create('categorizables', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('category_id');
    $table->morphs('categorizable');
    $table->timestamps();
});

问题是,拯救这段关系的正确方法是什么,我正在修补程序上进行测试attach($category_id) and sync($category_id)没有保存关系,他们返回错误BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::categorizable()',我缺少什么?


抱歉,我以为您想要多对多关系。morphOne关系 API 与morphMany来自docs https://laravel.com/docs/5.4/eloquent-relationships#many-to-many-polymorphic-relations

Post extends Model
{
    public function category() {
        return $this->morphOne(Category::class, 'categorizable');
    }
}

Category extends Model
{
    public function categorizable() {
        return $this->morphTo();
    }
}

EDIT使用 morphOne 时,您不需要数据透视表categorizables必须删除表并更改您的categories包含变形字段的表

// Category Table
- id
- name
- categorizable_id
- categorizable_type
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel - 如何设置 morphOne 关系 的相关文章

随机推荐

  • 在Python中提取文件路径(目录)的一部分

    我需要提取某个路径的父目录的名称 它看起来是这样的 C stuff directory i need subdir file jpg 我想提取directory i need import os first file in current
  • ASP .NET Core 2 MVC 错误 NU1202 在 VS 2017 和 NET CLI 上创建项目

    我已经安装了 VS2017 15 3 0 和 NET Core 2 0 并在 VS 2017 上创建了默认的 Web MVC 应用程序 但出现以下错误 错误 NU1202 软件包 System Threading Overlapped 4
  • 具有 1 亿个节点的图中的连接组件

    我正在尝试获取具有 1 亿个节点的图中的连接组件列表 对于较小的图 我通常使用连接组件 http networkx lanl gov reference generated networkx algorithms components co
  • 在Android应用程序中读取本地压缩XML文件(gzip)

    我不知道如何获得InputStream 读取gzip压缩的本地xml文件 从本地存储gzip xml file 员工 gz 如果有人可以帮助我真的很感激 谢谢 此链接适用于 zip http techdroid kbeanie com 20
  • Visual Studio 构建工具 2017 中缺少 vs_buildtools.exe

    I 已安装 https www visualstudio com downloads 使用链接 位于底部的 其他工具和框架 下 安装 Visual Studio 构建工具 2017 安装两个工作负载 Visual C 构建工具和 Web 开
  • Google Sheet 根据单元格值进行保护

    我在一个 google 工作表文件中有大约 30 个选项卡 所有这些选项卡都具有相同的结构但数据不同 我想要一个根据值锁定 保护 整个工作表的脚本 该值被定义为范围 如果该值是 已审核 我想锁定选项卡 单元格位置 A5 单元格值 已审核 f
  • 如何在 Flex 中使用两个表达式(case)编写内联条件语句?

    我如何用两个表达式 case 在Flex中编写内联条件语句 like text expression expression2 true false Flex编译器只检查第一个表达式并代表给出结果 但我想检查语句并显示结果 如果不满足任何条件
  • 如何在多线程应用程序中使用 StackExchange.Redis IDatabase 对象?

    我从 StackExchange Redis 文档中收到有关如何使用 IDatabase 的混合消息 在里面基本使用文档 https github com StackExchange StackExchange Redis blob mas
  • SQL Group By - 从单列生成多个聚合列

    我想按公司和日期进行分组 并为 2 个单独的值 Flag Y 和 Flag N 生成计数列 输入表如下所示 Company Date Flag 001 201201 Y 001 201201 N 001 201202 N 001 20120
  • 使用 Paypal IPN 订阅

    我正在使用 Paypal IPN 添加订阅到网站 效果非常好 我可以成功创建新订阅并验证它 该订阅有两周的免费试用期 不幸的是 该指南对订阅状态的描述有点含糊 目前 一旦收到 subscr signup 或 subscr payment 用
  • 什么会导致 Java 在 System.exit() 之后继续运行?

    我有一个 Java 程序 正在通过以下方式启动ProcessBuilder来自另一个 Java 程序 System exit 0 是从子程序调用的 但对于我们的一些用户 在 Windows 上 java exe与子进程关联的进程不会终止 子
  • Visual Studio 2015 项目缺少所有引用

    从今天开始 一个属于有20个项目的解决方案的WPF项目 将我的所有引用设置为缺失 我刚刚检查了 MS 的建议和 Stackoverflow 上的其他答案 但没有一个起作用 我尝试从 SVN 重新获取解决方案 但没有运气 其他同事没有遇到这个
  • 如何修复:致命异常:main android.os.NetworkOnMainThreadException [重复]

    这个问题在这里已经有答案了 我在 android 版本 18 上运行我的代码时遇到问题 我已经使用了 AsyncTask 但仍然收到错误 请帮助 我是编程新手 所以请原谅我的错误 package com example androidhiv
  • 提取 git 提交中更改的所有文件

    我需要为某人制作一个补丁 他们没有使用 git 由提交更改的文件的 zip 我想像 git archive format zip commitguid gt myfiles zip 但这会提取整个内容 而不仅仅是更改的文件 有什么办法可以做
  • 如何使用 Cocoa UI 制作 Java 应用程序?

    我必须在项目中使用 Java API 但由于我不喜欢 Java UI 并且我有一台 Mac 所以我想围绕 Java 代码构建一个本机 Cocoa 应用程序 我知道 Xcode 曾经为此类事情提供直接支持 但由于它不再提供 那么最好的方法是什
  • 在android webview中全屏播放HTML5视频

    好吧 我已经搜索了几天了 如何在 android WebView 上以全屏模式显示 HTML5 视频 我设法在我的网络视图上播放 HTML5 视频 以全屏模式显示视频时会出现问题 正如我所发现的 android 有两种处理 标签的方法 在
  • 将 Canvas 内容导出为 PDF

    我正在使用 HTML5 Canvas 做一些事情 一切都工作得很好 除了现在 我可以使用 Canvas2image 将画布内容导出为 PNG 但我想将其导出为 PDF 我做了一些研究 我很确定这是可能的 但我似乎无法理解我需要在代码中更改什
  • 网络共享的锁定行为有所不同

    我一直在尝试锁定文件 以便其他克隆服务无法访问该文件 然后我读取该文件 完成后移动该文件 通过使用允许移动FileShare Delete 然而 在后来的测试中 我们发现如果我们正在查看网络共享 则这种方法不起作用 我知道我的方法可能不是最
  • iPhone/iOS自定义控件

    我想知道如何从头开始创建自定义 iPhone 控件 或者使用现有的库或框架 我已经看到了 Three20 库 以及 Tapku 和 Touch Customs 它们对于专门的 iOS 控件 例如表格视图等 非常有用 但我在这里讨论的是制作完
  • Laravel - 如何设置 morphOne 关系

    我正在尝试为类别实现一个可变形表 现在我有以下内容 Snippet Table id title body Post Table id title body Category Table id name 我希望能够将帖子和片段改为只有一个类