首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel 5.8 ManyToMany关系子关系usign外键不起作用

Laravel 是一款流行的 PHP Web 开发框架,它提供了丰富的工具和功能来简化 Web 应用程序的开发过程。在 Laravel 中,ManyToMany 关系是一种常用的关系类型,用于定义多对多的关系。

在 Laravel 5.8 版本中,当使用 ManyToMany 关系时,有时会遇到子关系的外键不起作用的问题。这通常是由于以下几个原因导致的:

  1. 关联表的命名规范:Laravel 5.8 默认使用关联表的名称来确定关联关系,如果关联表的命名不符合 Laravel 的约定规范,外键关系可能无法正确建立。确保关联表的名称符合 Laravel 的命名规范,可以避免这个问题。
  2. 关联表的字段定义:在关联表中,确保定义了正确的外键字段。外键字段应该对应关联的两个模型的主键,以建立正确的关联关系。如果外键字段没有正确定义,ManyToMany 关系的子关系将不起作用。

解决这个问题可以按照以下步骤进行:

  1. 确认关联表的命名是否符合 Laravel 的约定规范,如果不符合,可以手动指定关联表的名称。可以使用 Laravel 的 belongsToMany 方法的第三个参数来指定关联表的名称。
  2. 在关联表中,确保定义了正确的外键字段。外键字段应该对应关联的两个模型的主键。可以使用 Laravel 的 belongsToMany 方法的第三个参数来指定关联表的外键字段。

下面是一个示例代码,用于解决 Laravel 5.8 中 ManyToMany 关系子关系外键不起作用的问题:

代码语言:txt
复制
// 在模型 User 中定义 ManyToMany 关系
public function roles()
{
    return $this->belongsToMany(Role::class, 'user_role', 'user_id', 'role_id');
}

// 在模型 Role 中定义 ManyToMany 关系
public function users()
{
    return $this->belongsToMany(User::class, 'user_role', 'role_id', 'user_id');
}

在上面的示例中,关联表的名称为 user_role,并且指定了正确的外键字段。

关于 Laravel 的 ManyToMany 关系及其使用方法,你可以参考腾讯云提供的 Laravel 手册:Laravel 手册 - ManyToMany 关系

请注意,由于要求不能提及具体的云计算品牌商,上述链接仅作为示例,并非实际的腾讯云产品链接。在实际应用中,你可以根据具体需求选择适合的腾讯云产品来支持 Laravel 的部署和运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JPA实体类中的注解

,也就是多的一方作为关系维护端,负责维护,而一的一方是不能操作的; @oneToMany(cascade={CascadeType.*},fetch=FetchType....*,optional=true|false) @JoinColum(name="")--》维护关系) 一般定义级联保存、级联查询 默认为立即加载! optional可选?...一对一 @OneToOne(mapperBy="",cascade={CascadeType.*}) 随便一端都可以作为关系维护端 通过mapperBy指定为被维护端 fetch默认为立即加载 则在关系维护端定义...关系被维护端: @ManyToMany(cascade={CascadeType.*},mapperBy="itself") 关系维护端 @ManyToMany(cascade={CascadeType...joinColum指关系维护端本身的 总结 关系被维护端用mapperBy来定义关系 关系维护端用joinColum来指定键名称,维护或者是@JoinTable通过中间表维护关系 *ToOne

3.9K70
  • Hibernate关联关系

    单向外关联(@ManyToMany) 1.4.4.1. 通过学生访问老师的信息 1.4.5. @JoinTable 1.4.6. @ManyToMany 1.4.6.1....,如下:select * from husband h join wife w on h.wife_id=w.id; 妻子的主键作为丈夫的,那么这个是表中的关系,在实体类中的关系就是妻子的对象作为丈夫的实体类的属性...,在创建表的关联关系的时候,总是在多的一方,即是一的一方的主键作为多的一方的 单向外关联 前面已经说过,单向外关联是只能单向访问,只能一张表访问另外一张表,比如通过One的一方可以访问到Many...,在建立表的时候使用的是第三张表来维护,如下: 单向外关联(@ManyToMany) 通过学生访问老师的信息 根据需求我们必须在Student的类中将Teacher类的对象声明为成员变量,多对多的关系...,一定要使用mappedBy指定的维护权,否则将会出现数据冗余 在一对以和一对多,多对一的关系中,我们可以使用@JoinColumn这个注解来设置的字段名,但是在多对多的关系中,因为需要第三张表来维护

    6.3K30

    快速学习-JPA中的多对多

    所以我们说,用户和角色之间的关系是多对多。 4.2 表关系建立 多对多的表关系建立靠的是中间表,其中用户表和中间表的关系是一对多,角色表和中间表的关系也是一对多,如下图所示: ?...@ManyToMany(mappedBy="users") private Set roles = new HashSet(0); public Long...@JoinTable 作用:针对中间表的配置 属性: nam:配置中间表的名称 joinColumns:中间表的字段关联当前实体类所对应表的主键字段...inverseJoinColumn:中间表的字段关联对方表的主键字段 @JoinColumn 作用:用于定义主键字段和字段的对应关系。...属性: name:指定字段的名称 referencedColumnName:指定引用主表的主键字段名称 unique:是否唯一。

    1.6K20

    hibernate 一对一,一对多,多对多关联关系使用

    标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。...一对一 如果我们只是单纯的在两个实体类中分别加上@OneToOne注解,会发现两张表都分别引入了对方的主键作为。明显的数据冗余,毕竟关系不用双方存储。...生成表结构关系如下 ? 只有ManyToOne一个注解 默认是在many_object里面加了一个列 ?...多对多 正常建立两个多对多关系实体 1.多对多实体一 package com.example.demo.entity.manytomany; import java.util.List; import...表结构 很显然的关系表冗余。 利用@ManyToMany(mappedBy="manytwos")的mappedBy属性将关系表改为由一端维护。

    5.2K20

    Elixir and Pylons 中多态继承和自关联关系的创建

    我们知道,在Elixir和Pylons中,多态继承和自关联关系是两个独立的概念,分别用于处理不同的情况。...而在Pylons中,多态继承通常由SQLAlchemy提供的 polymorphic 关系来实现。下面分别介绍在Elixir和Pylons中如何创建多态继承和自关联关系。...二、解决方案为了解决这个问题,可以采用以下方法:1、修改 Nav 表的 before 字段类型为 ManyToMany,并使用 primaryjoin=Nav.id 选项来指定两张表之间的连接字段。...2、在 Nav 表中,将 before 字段的类型从 OneToMany 更改为 ManyToMany,如下:class Nav(Entity): using_options(inheritance...Employee 模型通过 manager_id 和 relationship 关联实现了自关联关系,表示员工与其直接下属之间的关系

    12410

    PlayFramework 2.x 技巧-@ManyToMany关联

    对于OneToMany或ManyToOne关系,JPA规范明确指出以Many一端为关系的维护端,One一端为关系的查询端;而对于ManyToMany的关联关系,双方都可以作为关系的维护端,因此在日常的开发工作中会出现一些误用...@ManyToMany的使用误区 1)双向@ManyToMany关联时,实体双方都未指定mappedBy属性     如果两边都未指定mappedBy属性,则EBean会认为双方都可以作为关系的维护端...属性的值可以理解为另一个实体的,我们再来看一下Role实体的定义: @Entity public class Role extends Model { @Id public long id;...在ManyToMany关联中,级联删除只会删除关联关系,而不会删除关联实体。...小结 1)在双向关联关系中,明确使用mappedBy属性指定关系的查询端(反向端),另一端为关系的维护端; 2)关系的查询端(反向端)只能查询关系,而不能保存关系; 3)ManyToMany

    1.2K100

    Hibernate多表关系配置

    多对多(一个老师教多个学生,一个学生可以被多个老师教) 一对一(一个公司只能对应一个注册地址) 表之间关系建表原则 一对多(在多的一方创建一个,指向一的一方的主键) 多对多(创建一个中间表,中间表至少有两个字段...,分别作为键指向多对多双方的主键) 一对一(唯一对应或主键对应) 2 一对多配置 1.建表(班级、学生) class_id class_name numbers stu_id stu_name...,在一的一方配置文件写上set标签name属性为关联属性名,里面还有key标签有column属性关系中的即另一个表的字段名,还有一个标签one-to-many写上另一表的domain类全路径。...在多的一方只有一个many-to-one标签里面name属性也是关联属性名,class属性关系表它的domain地址,还有一个column <class...),删除也是先去掉再删除。

    72820

    Spring 全家桶之 Spring Data JPA(五)

    /setter方法,用户的角色是一组集合,用Set表示 在角色集合上增加@ManyToMany注解,表明多对多的关系 @JoinTable表示配置中间表,name表示中间表的名称,joinColumns...配置的是当前对象在中间表中的,name值得值中间表的主键,referencedColumnName当前类对应表的主键,inverseJoinColumns:对方对象在中间表的 ```java @...@ManyToMany:声明表的映射关系为多对多关系,targetEntity为对方实体类的字节码 @JoinTable:配置中间表,name为中间表的名称, joinColumns配置的是当前对象在中间表中的...,name值得值中间表的主键,referencedColumnName当前类对应表的主键 inverseJoinColumns:对方对象在中间表的 */ @ManyToMany(targetEntity...,mappedBy是指role在对方表的属性名称 //@ManyToMany(targetEntity = User.class) //@JoinTable(name = "sys_user_role"

    2.1K20

    Spring的学习笔记(十七)——SpringDataJpa动态查询和复杂的多表操作

    多表之间的关系和操作多表的操作步骤 表关系 一对一 一对多: 一的一方:主表 多的一方:从表 :需要再从表上新建一列作为...包含关系:可以通过实体类中的包含关系描述表关系 继承关系 分析步骤 1.明确表关系 2.确定表关系(描述 |中间表) 3.编写实体类,再实体类中描述表关系...如果设置为false,则必须始终存在非空关系。 @JoinColumn 作用:用于定义主键字段和字段的对应关系。...:中间表的字段关联对方表的主键字段 @JoinColumn 作用:用于定义主键字段和字段的对应关系。...joinColumns配置当前对象在中间表中的 inverseJoinColumns配置对方对象在中间表中的 * */ @ManyToMany(targetEntity

    3.5K10

    SpringDataJPA笔记(1)-基础概念和注解

    比如可以重定义字段名或长度等属性,使用@AttributeOverride中的属性@Column进行具体的定义 注意:对于其父类中标注@Lob注解的属性将不能重载,并且@AttributeOverride...one2one关系关系维护端的主键作为键指向关系被维护端的主键,不再新建一个列 元数据属性说明: name:列名。...joinColumns:定义指向所有者主表的列,数据类型是JoinColumn数组。...inverseJoinColumns:定义指向非所有者主表的列,数据类型是JoinColumn数组 @JoinColumn 如果在entity class的field上定义了关系(one2one或one2many...referencedColumnName:该列指向列的列名(建表时该列作为列指向关系另一端的指定列) unique: 是否唯一 nullable: 是否允许为空 insertable:

    3.9K20

    Django学习笔记之Queryset详解

    一般的我们没有自定义QuerySet类的必要;django.db.models模块中的Model类,我们定义表的model时,就是继承它,它的功能很强大,通过自定义model的instance可以获取实体等...先filter,然后对得到的QuerySet执行delete()方法就行了,它会同时删除关联它的那些记录,比如我删除记录表1中的A记录,表2中的B记录中有A的,那同时也会删除B记录,那ManyToMany...对于ManyToMany,删除其中一方的记录时,会同时删除中间表的记录,即删除双方的关联关系。...'Beatles Blog') #限定表的字段 #下面是反向连接,不过要注意,这里不是entry_set,entry_set是Blog instance的一个属性,代表某个Blog object...在UserJob中定义User为,在Job中定义与User是ManyToMany >>> a = User.objects.filter(is_active=True, userjob__is_active

    2.7K30
    领券