首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在使用接口时定义关系

如何在使用接口时定义关系
EN

Stack Overflow用户
提问于 2016-01-06 13:59:25
回答 1查看 978关注 0票数 8

Laravel中多态关系的正常使用在后用户图像示例中得到了很好的介绍。

我正试图找到一种简洁的方法来实现关系,比如文章/内容/内容B关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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类,但是如果可能的话,我想避免这种情况。

也许这更能解释我的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Article extends Model {
    public function contentEntities() {
        return $this->hasMany(ContentEntity::class);
    }
}

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

class Content extends Model {
    public function contentEntity() {
        return $this->morphOne(ContentEntity::class, 'contentable');
    }
}

class Video extends Model {
    public function contentEntity() {
        $this->morphOne(ContentEntity::class, 'contentable');
    }
}

这很管用,但在我看来很不干净。我认为它增加了太多的开发人员开销,不需要管理ContentEntity父级。

编辑:,除非有人提供更好的解决方案,否则我使用ContentEntity的EAV风格的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2016-05-02 10:09:56

为了将来更容易维护和扩展,您总是可以提取出与某一特性的关系:

性状

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
}

然后,您所需要做的就是在各种实体中使用该特性:

模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Content extends Model {
    use Contentable;
}

class Video extends Model {
    use Contentable;
}

class Article extends Model {
    use Contentable;

    protected $contentable = 'many';
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34643629

复制
相关文章
SQLAlchemy 定义关系
数据库中的数据表可以看做是现实世界中一类事物的抽象,而表中的每一行数据都可以看做是一个实例「即现实世界的实体」。在现实世界中每个事物/实体都不是单独不是单独存在的,都与其他事物或实体存在或多或少的关联,对应在数据库中,数据表之间也存在着不同的关联,我们将这种关联称之为关系。
keinYe
2019/08/01
6930
使用Postman如何在接口测试前将请求的参数进行自定义处理
当我们使用 Postman 进行接口测试时,对于简单的不需要处理的接口,直接请求即可,但是对于需要处理的接口,如需要转码、替换值等,则就麻烦一些,一般我们都是先手动把修改好的值拷贝到请求里再进行请求接口,这也是大多数测试人员进行接口测试时这么做的。
wangmcn
2023/08/22
5640
使用Postman如何在接口测试前将请求的参数进行自定义处理
接口定义
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154576.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
4670
【接口测试】如何在 Eolink Apilkit 中使用 cookie ?
Cookie是一种在网站之间传递的小型文本文件,用于存储用户的个人信息和偏好设置。当您访问一个网站时,网站会将Cookie存储在您的浏览器中,并在您下次访问该网站时读取该Cookie。这样,网站可以记住您的登录状态、购物车内容以及其他个性化设置。
API 小达人
2023/10/10
2500
sdio接口定义_sdio接口
转:https://www.cnblogs.com/hellokitty2/p/10981084.html SDIO接口 一、SDIO简介
全栈程序员站长
2022/11/09
2.4K0
sdio接口定义_sdio接口
如何在条码打印软件中使用打印时保存
有些客户在条码打印软件中批量制作完成标签之后,想要把标签内容以txt文本的形式保存出来,可以把标签上的每个内容分别保存到一个TXT文本,也可以把标签上的多个内容保存到一个TXT文本中,条码打印软件中打印时保存就可以实现这个效果,具体操作如下:
用户5746110
2019/07/03
2.4K0
接口定义规范
{ "userId"... "userName"... "userPhoto"... "orderId"... "orderType"... "addressId"... "addressName"... "addressDetail"... }
只喝牛奶的杀手
2019/08/26
9490
依赖关系(“使用”关系)
依赖关系是一种使用关系,如果A类中的某个方法使用了B类对象,那么就可以说A类依赖B类。
全栈程序员站长
2022/09/06
1.1K0
网线接口定义
参考资料:http://blog.csdn.net/dog0138/article/details/7016351
全栈程序员站长
2022/09/05
1.2K0
网线接口定义
【集合论】偏序关系 ( 偏序关系定义 | 偏序集定义 | 大于等于关系 | 小于等于关系 | 整除关系 | 包含关系 | 加细关系 )
划分 5 : 对应 3 个等价关系 , 分成 3 类 ; 每个元素自己自成一类
韩曙亮
2023/03/27
5.6K0
PCIE接口定义[通俗易懂]
PCI Express (PCIe, PCI-e) is a high-speed serial computer expansion bus standard.
全栈程序员站长
2022/08/14
3.1K0
PCIE接口定义[通俗易懂]
Jlink 接口定义
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134293.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
1.2K0
Jlink 接口定义
接口定义规则
刚刚进公司时, 写的接口返回过map, string, object, json等等, 回头看看写的乱七八糟的.
全栈程序员站长
2022/09/02
4000
USB接口定义
USB是电脑的常见接口,有4根线,两根电源线和两个信号线,电源线正负极供电,接烦可能导致USB设备或电脑的南桥芯片烧坏。
全栈程序员站长
2022/09/02
1.9K0
USB接口定义
如何在HLS中使用AXI4-Stream接口
AXI4-Stream接口在进行数据传输时是顺序传输的,类似于FIFO,先进先出,这意味着需要映射为AXI4-Stream接口的函数形参只能被读取或只能被写入(赋值)。同时,AXI4-Stream传输数据的位宽是按Byte(字节)对其的,这意味着如果数据位宽不是8的整数倍,那么就需要对数据进行扩展,类如,若数据是12-bit,就需要将其扩展为16-bit,具体是高4位补零还是符号位扩展取决于传输数据是无符号数还是有符号数。此外,传输数据的最大位宽是4096-bit。再来看一下AXI4-Stream是如何工作的。如下图所示。Producer和Consumer之间只有数据通道TDATA和其他握手信号如TREADY、TLAST、TVALID。其中TVALID为高表明Producer发送的数据有效,TLAST为高时表明此时发送的是最后一笔数据,TREADY为高时表明Consumer可以接收数据。
Lauren的FPGA
2022/12/21
1.5K0
如何在HLS中使用AXI4-Stream接口
如何在antdPro中使用自定义SVG图标?
以上截图出自antd的Icon组件(https://ant.design/components/icon-cn/)
进击的小进进
2022/03/28
2.9K0
如何在antdPro中使用自定义SVG图标?
使用自定义注解实现接口参数校验
在接口的开发中,我们有时会想让某个接口只可以被特定的人(来源)请求,那么就需要在服务端对请求参数做校验.
呼延十
2019/06/26
1.8K0
使用自定义注解实现接口参数校验
j-link接口定义及实际使用[通俗易懂]
分别为:PA13/JTMS/SWDIO、PA14/JTCK/SWCLK、VCC、GND
全栈程序员站长
2022/09/02
4K0
如何在使用 Flutter时切换应用时隐藏应用预览
如果您要显示敏感数据,例如。钱包金额,或者只是当登录表单显示插入的密码清晰时(想想眼睛图标..),当您不在应用程序中时,您必须隐藏敏感数据。
徐建国
2022/06/24
2.2K0
如何在使用 Flutter时切换应用时隐藏应用预览
如何在C中定义多行宏定义?
请参阅下面的示例,其中我将交换两个变量的值。 do-while(0)结构很不错 #include <stdio.h> #define swap(x,y,T) do { \ T temp = (*x);\ (*x) = (*y); \ (*y) = temp; \ } while (0) int main(void) { int a = 5; int b = 9; printf("Value of a and b before swaping\n"
用户4645519
2020/09/08
2.6K0
如何在C中定义多行宏定义?

相似问题

接口定义的关系术语

33

QueryBuilder提取关系,如使用find()方法

137

如何在接口定义的接口中使用参数?

22

使用CakePHP定义访问控制列表接口(gui)的模型关系

12

如何在使用xslt转换xml时保留自定义实体(如&ndash;)

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文