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

同一张表上的Laravel belongsToMany :如何创建对称关系?

在Laravel中,通过使用belongsToMany关系,可以在同一张表上创建对称关系。具体步骤如下:

  1. 首先,在数据库中创建一张表,用于存储关系。该表可以命名为table1_table1,其中table1为表名。该表应包含两个字段,分别表示两个表之间的关联关系。例如,可以创建table1_id1table1_id2字段,分别表示两个表的关联ID。
  2. 在Laravel的模型中,定义两个模型类,分别对应两个表。假设这两个模型类分别为Table1Table2
  3. Table1模型类中,使用belongsToMany方法定义与Table2模型类的关联关系。代码示例如下:
代码语言:txt
复制
public function table2()
{
    return $this->belongsToMany(Table2::class, 'table1_table1', 'table1_id1', 'table1_id2');
}
  1. Table2模型类中,同样使用belongsToMany方法定义与Table1模型类的关联关系。代码示例如下:
代码语言:txt
复制
public function table1()
{
    return $this->belongsToMany(Table1::class, 'table1_table1', 'table1_id2', 'table1_id1');
}
  1. 现在,可以通过table1table2方法来访问两个表之间的关联数据。例如,可以使用以下代码获取Table1模型实例关联的Table2模型实例:
代码语言:txt
复制
$table1 = Table1::find(1);
$table2 = $table1->table2;

以上就是在同一张表上使用belongsToMany方法创建对称关系的步骤。这种关系适用于多对多的场景,例如一个用户可以拥有多个角色,一个角色也可以被多个用户拥有。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云对象存储COS等。你可以通过访问腾讯云官网了解更多关于这些产品的详细信息和使用指南。

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

相关·内容

浅谈laravel5.5 belongsToMany自身正确用法

场景 用户之间相互关注,记录这种关系是followers(follower_id 发起关注的人 followed_id被关注的人) 现在多对多关系就不再是传统关系了, 这种情况 多对多关系应该怎么声明呢...分析 laravel或者其他框架多对多关系 一般都是由Model1 Model2 Model1_Model2(声明两者关系)来组成, 但是上面的场景 却是只有两,这时候就要研究下官方文档了...方法传递参数是可以定制 以达到个性化需求, 第一个参数是 第二个Model 第二个参数是 关系名 第三个参数是 第一个Model在关系外键ID 第四个参数是 第二个Model在关系外键...关系名是 ‘followers’ /** * 关注当前用户 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany...} 以上这篇浅谈laravel5.5 belongsToMany自身正确用法就是小编分享给大家全部内容了,希望能给大家一个参考。

1.3K31

MySQL 8.0 如何创建规范

这一节内容,基于 MySQL8.0 版本,聊一下如何创建规范。...防止因为大小写问题找不到或者弄错。 2 int 类型不再加上最大显示宽度,也就是不适用类似int(11) 形式。 具体原因可复习:MySQL 5.7 和 8.0 几处细节差异。...5 通常建议包含 create_time 和 update_time 字段,即必须包含记录创建时间和修改时间字段。 方便知道记录什么时候创建,什么时候更新,分析问题时候很方便。...如果实在有某个字段过长需要使用 TEXT、BLOB 类型,则建议独立出来一,用主键来对应,避免影响原查询效率。 10 经常做为条件、排序、关联字段增加索引。...大概想到就是这些,当然,创建规范,还需要结合线上环境,比如是否有分库分、是否会经常归档历史数据等

3.7K20
  • Laravel 模型关联基础教程详解

    当涉及到查询模型时,我们如何充分利用模型关联功能? Laravel 模型关联可能会让人糊涂。...如果你不完全理解 Laravel 关联在这一点如何工作,别担心,读完这篇文章后,你会更好地理解它。 我们应该使用哪个模型关联? 要回答这个问题,首先你要知道有哪些可用选项。...举个例子,一个 User 模型和一个 Passport 模型会成为一对一关联。一个用户只能拥有一通行证,同样,一通行证也只属于一个用户。 让我们看看如何在代码中定义这种关联。 <?...默认情况下,Laravel会假设你在用户模型中定义了 passport_id ,因为你试图创建与 passport 模型关联。创建迁移文件时也请注意这一点!...你可以通过创建迁移文件在 Laravel创建此中间。 远程关联 远程一对一 has one through 关联通过单个中间关联模型实现。

    5.5K31

    Laravel多对多关系详解【文章 - 标签】

    前言 今天弄了一天关于文章功能,其中主要卡在文章与标签多对多关系纠结中。卡了半天,终于算是解决了,不是很完美,但可以。 新建迁移文件 多对多关系中,需要三。...两主体表、一这两关系。...这是我是文章【articles】、标签【tags】以及关系【article_tag】 其中关系命名是[article_tag]而不是tag_article 因为laravel默认是以字母升序排列...我们使用 $this->belongsToMany() 来表明Eloquent关系,这里需要注意是如果你外键并不是 article_id 和 tag_id ,你需要在第三个参数进行设置,写成类似下面这样...: public function articles() { return $this->belongsToMany('App\Article','conversation_id'); } 创建文章和标签

    1.8K00

    Laravel Eloquent 模型关联关系详解(

    到目前为止,我们介绍所有 Eloquent 模型操作都是针对单,接下来我们将花三篇左右篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间各种关联关系,以及如何实现关联查询和更新。...针对这样场景,我们就可以在两对应模型之间建立一对一关联。...在开始之前,我们先通过数据库迁移创建 user_profiles 数据,并创建对应模型 UserProfile,这可以通过以下 Artisan 命令一次完成: php artisan make:...->hasMany(Post::class); } 由于我们之间已经创建过 users 和 posts ,并且初始化过数据,所以我们可以直接通过动态属性方式来调用用户模型文章: $user...多对多关联比一对一和一对多关联复杂一些,需要借助一中间才能建立关联关系。以文章标签为例,文章已经存在了,还需要创建 tags 和中间 post_tags。

    9.9K40

    Laravel源码分析之模型关联

    使用模型关联给应用开发带来收益我认为有以下几点 主体数据和关联数据之间关系在代码表现更明显易懂让人一眼就能明白数据间关系。...按照Laravel设定好模式来写关联模型每个人都能写出高效和优雅代码 (这点我认为适用于所有的Laravel特性)。...$foreignKey, $localKey ); } /** * 创建一个关联模型实例 */ protected function newRelatedInstance($class...多对多 多对多关联不同于一对一和一对多关联它需要一中间来记录两端数据关联关系,官方文档里以用户角色为例子阐述了多对多关联使用方法,我们也以这个例子来看一下底层是怎么来定义多对多关联。...类实例,与定义一对多关联时一样,实例化BelongsToMany时定义里与关联相关配置:中间名、关联模型、父模型在中间外键名、关联模型在中间外键名、父模型主键、关联模型主键、关联关系名称

    9.6K10

    Laravel中使用路由控制权限(不限于Laravel,只是一种思想)

    每一个页面认证当前需要权限一次 在统一地方(中间件)验证 先上一下简单结构(只保留重要信息)数据库模型 ER 图 数据库模型图 (ps:这个设计中,用户不会直接拥有权限,只能通过角色继承权限...{ return $this->belongsToMany(User::class); } // 角色和权限模型关联关系 public function permissions...php namespace App\Models; class Permission extends Model { // 角色和权限模型关联关系 public function...1 | +------------------+ ######################################## # permission_role (角色 admin 拥有创建商品和删除商品权限...,还是要在不同方法进行验证,而且可扩展性不高,这时候我们只需要在权限加一个字段,就可以解决问题 1. permissions (加多一个 route 字段, 如果不在 laravel 中使用,可以加一个

    20010

    orm 系列 之 Eloquent演化历程1

    是怎么设计,active record这种模式优缺点等问题,下面我会带领大家从头开始看看Eloquent是如何设计并实现。...,于是就有了一个改动,在Model同一层级引入了一新Builder,具体通过git co c420bd8查看。...此时关系处理上主要逻辑是调用ModelHasOne等关系方法,返回Relation子类,然后通过Relation来处理进而返回数据,这么说可能有点绕,我们下面具体介绍下每个关系实现,大家可能就理解了...,一个角色也会有不同的人,这个时候就需要一中间role_user,代码声明如下: class User extends Model { /** * The roles that...role,joinuser_role 在get时候,其逻辑和HasOne等关系也所有不同,代码如下: // class belongsToMany public function get($columns

    1.1K30

    Laravel5.2之Seeder填充数据小技巧

    说明:本文主要聊一聊Laravel测试数据填充器Seeder小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中一些截图和代码黏上去,提高阅读效率。...设计字段 按照上文提到Category、Post、Comment和Tag之间关系创建迁移Migration和模型Model,在项目根目录输入: php artisan make:model Category...Tag是多对多关系,还需要一存放两者关系: //多对多关系,中间命名laravel默认按照两表字母排序来,写成tag_post会找不到中间 php artisan make:migration...(Post::class)->withTimestamps(); } } 然后执行迁移: php artisan migrate 数据库中会生成新建关系如下: Seeder填充测试数据...分享下最近发现好图和一篇极赞文章: 文章链接:Laravel中大型專案架構

    3.5K42

    第16问:创建时,MySQL 统计如何变化

    本文关键字: 统计,debug 问题 我们知道在 MySQL 中创建时,一些统计会发生变化,比如:mysql/innodb_index_stats,会多出几行对新描述。...那么会变更几张?这些统计如何变化? 实验 本期我们用 MySQL 提供 DBUG 工具来研究 MySQL SQL 处理流程。 起手先造个实例 ?...然后我们创建了一,来看一下调试输出结果: ?...现在我们可以在输出中找一下统计表相关信息: ? 可以看到 MySQL 在这里非常机智,直接执行了一个内置存储过程来更新统计。...沿着 que_eval_sql,可以找到其他类似的统计,比如下面这些: ? ? 本次实验中,我们借助了 MySQL DBUG 包,来让 MySQL 将处理过程暴露出来。

    1.3K20

    Laravel5.1框架自带权限控制系统 ACL用法分析

    分享给大家供大家参考,具体如下: Laravel在5.1.11版本中加入了Authorization,可以让用户自定义权限,今天分享一种定义权限系统方法。 1....创建角色与权限 使用命令行创建角色与权限: php artisan make:migration create_permissions_and_roles --create=permissions...、权限、角色与权限中间以及角色与用户中间。...更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及...《php常见数据库操作技巧汇总》 希望本文所述对大家基于Laravel框架PHP程序设计有所帮助。

    54561

    PHP-web框架Laravel-Eloquent ORM(二)

    三、模型关联Laravel框架中Eloquent ORM提供了方便模型关联功能,用于定义不同之间关联关系。下面是几个常用模型关联类型。...belongsTo(User::class); }}上述代码中,定义了一个User模型和一个Phone模型,通过在User模型中定义phone方法和在Phone模型中定义user方法,实现了这两个模型之间一对一关联关系...Post::class); }}上述代码中,定义了一个Post模型和一个Comment模型,通过在Post模型中定义comments方法和在Comment模型中定义post方法,实现了这两个模型之间一对多关联关系...多对多关联多对多关联表示两个模型之间存在多对多关联关系。下面是一个示例:<?...(User::class); }}上述代码中,定义了一个User模型和一个Role模型,通过在User模型中定义roles方法和在Role模型中定义users方法,实现了这两个模型之间多对多关联关系

    62741

    PHP-web框架Laravel-Eloquent ORM(三)

    四、查询构建器Laravel框架中Eloquent ORM提供了方便查询构建器,用于构建复杂查询语句。下面是一些常用查询构建器方法。...orderBy方法orderBy方法用于添加排序条件,例如:$users = User::orderBy('created_at', 'desc')->get();上述代码中,查询了按照创建时间倒序排列所有用户...总结通过上述文档和示例,我们可以看出Laravel框架中Eloquent ORM提供了便捷对象关系映射功能,可以大大简化开发者数据库操作。...在使用Eloquent ORM进行开发时,需要注意以下几点:模型类名默认对应名是模型类名复数形式,如User模型对应名是users,如果需要指定名可以通过定义$table属性来实现。...关联关系定义需要在对应模型类中定义,例如一对一关联需要在hasOne和belongsTo方法中定义,一对多关联需要在hasMany和belongsTo方法中定义,多对多关联需要在belongsToMany

    1.5K41

    分享8个Laravel模型时间戳使用技巧小结

    默认情况下,Laravel Eloquent 模型默认数据有 created_at 和 updated_at 两个字段。当然,我们可以做很多自定义配置,实现很多有趣功能。下面举例说明。 1....其他属性和方法 } 2. 修改时间戳默认列表 假如当前使用是非 Laravel 类型数据库,也就是你时间戳列命名方式与此不同该怎么办?...多对多:带时间戳中间 当在多对多关联中,时间戳不会自动填充,例如 用户 users 和 角色 roles 中间 role_user。...在这个模型中您可以这样定义关系: class User extends Model { public function roles() { return $this- belongsToMany...updated_at,也希望更新上级关系记录。

    3.8K31

    Laravel6.0.4中将添加计划任务事件方法步骤

    ($name); $builder- getGlobalMacro($name); $builder- hasGlobalMacro($name); 向 BelongsToMany 关联添加另一个访问方法来获取中间列...您可以在下面看到修复完整列表,以及 Github 6.0.3 和 6.0.4 之间全部差异。...Laravel 5.8 完整发行说明可在 Github v6 changelog 中找到: Laravel v6.0.4 版本 新增 添加了 TestResponse::assertJsonPath(...) 允许添加带有 InputArgument InputOption 对象命令参数和选项 (#29987) 修复 修复了 __() 和 null 参数 (#29967) 修复了在自定义数据透视模型修改...VerifyCsrfToken 中间件 (#29972) 修复了 Postgresql 列创建时没有可选精度问题 (#29873) 修复了具有特定文件名多路径迁移文件 (#29996) 修复了在测试中向

    1.7K21

    Laravel 软删除存在问题

    ,查询关联关系,不会对中间应用软删除条件 belonsToMany中中间是传入名参数,天然没办法获取中间是否需要应用软删除。...被关联是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联,中间,被关联都有软删除字段,查询关联关系,会对中间应用删除条件。...但是,如果要查询包含已删除关联关系,中间删除标记条件不会去除。 hasManyThrough中,中间是通过中间对象传入,可以获取到中间是否应用软删除。...但是中间软删除不是通过scope实现,关联关系对象在创建时候就已经把中间软删除条件附加上去了,因此,即使指定了withTrashed,也会有中间软删除查询条件。...从上面可以看出,Laravel软删除,在关联关系中会造成一些查询上条件歧义,非常容易产生bug.而且,belongsToMany中间问题是无解

    2.3K20
    领券