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

浅谈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.2K31
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel Eloquent 模型关联关系详解(上)

到目前为止,我们介绍所有 Eloquent 模型操作都是针对单,接下来我们将花三篇左右篇幅来给大家介绍如何在 Eloquent 模型类中建立模型之间各种关联关系,以及如何实现关联查询和更新。...比如在大型系统中,我们用户通常用于最基本信息存储,邮箱、用户名、密码等,然后像用户爱好、标签、个性签名、所在地等信息都存到另一张扩展中,需要时候才会去扩展取数据,从而提高查询性能。...以博客系统为例,一个用户可以发布多篇文章,反过来,一篇只能归属于一个用户,那么用户和文章之间就是一对多关系,同样,用户可以发布多条评论,一条评论只能归属于一个用户用户与评论之间也是一对多关系。...建立相对关联关系 与一对一一样,我们可以在文章模型中建立与用户模型之间相对关联关系,而且这种使用场景很普遍,比如在文章详细页或列表页显示文章作者信息。...如果是单条记录获取关联关系,就需要两次查询;如果是多条记录获取关联关系,比如文章列表获取作者信息,因为每篇文章作者通过动态属性获取都有一次查询,所以对N条记录来说,需要「N+1」次查询才能返回需要结果

9.8K40

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

一个页面认证当前需要权限一次 在统一地方(中间件)验证 先上一简单结构(只保留重要信息)数据库模型 ER 图 数据库模型图 (ps:这个设计中,用户不会直接拥有权限,只能通过角色继承权限...有很多packages会提供用户可以直接拥有权限功能) Model 模型关联关系处理: User 模型 <?...{ return $this->belongsToMany(User::class); } // 角色和权限模型关联关系 public function permissions...,还是要在不同方法进行验证,而且可扩展性不高,这时候我们只需要在权限一个字段,就可以解决问题 1. permissions (加多一个 route 字段, 如果不在 laravel 中使用,可以加一个...,如果没有返回 null * (不在 laravel 中使用时,可以获取当前 url) ****************************************/

15110

Laravel 模型关联基础教程详解

Laravel 有 3 种不同关联类型。 一对一 一对多 多对多 我们将逐个探讨不同关联类型并解释一应该什么时候使用它们。 一对一 一对一关联是目前存在最基本关联。...举个例子,一个 User 模型和一个 Passport 模型会成为一对一关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。 让我们看看如何在代码中定义这种关联。 <?...默认情况Laravel会假设你在用户模型中定义了 passport_id ,因为你试图创建与 passport 模型关联。创建迁移文件时也请注意这一点!...如果每个供应商都有一个用户,并且每个用户一个用户历史记录相关联,那么供应商可以通过用户访问用户历史记录。...举个例子,假设连接有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。 <?

5.5K31

Laravel学习记录--Model

,如果是单条记录获取关联关系,就需要两次查询;如果是多条记录获取关联关系,比如文章列表获取作者信息,因为每篇文章作者通过动态属性获取都有一次查询,所以对N条记录来说,需要N+1次查询才能返回需要结果...如果我们做一个博客系统是针对全球市场,可能针对不同国家推出不同用户系统和功能,每个国家用户访问仅展示其所在国家文章,这里就会涉及到三张 用户(users)国籍(countries)文章...,你可能希望根据存在关联对结果进行限制,获取有电话号码用户,为了实现这个功能 可以通过has()方法,将建立关系方法名传递给has即可 public function show(){...当获取模型记录时,你可能需要根据不存在关联对结果进行限制,获取没有电话号码用户记录,为了实现这个功能你可以使用doesntHave,并传递关联方法 public function show...belongsTo或者belongsToMany一个模型时,评论(comment)属于一篇文章(Post),有时更新子模型导致父模型时间戳更新非常有用 一个Comment模型更新时,你要自动使父模型

13.4K20

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础CRUD方法实现,Eloquent Model中除了基础CRUD外还有一个很重要部分叫模型关联,它通过面向对象方式优雅地把数据之间关联关系抽象到了...多对多 多对多关联不同于一对一和一对多关联它需要一张中间来记录两端数据关联关系,官方文档里以用户角色为例子阐述了多对多关联使用方法,我们也以这个例子来看一底层是怎么来定义多对多关联。...Role extends Model { /** * 获得此角色用户。...定义一个多对多关联, 返回一个BelongsToMany关联关系实例 * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany...、关联模型、父模型在中间外键名、关联模型在中间外键名、父模型主键、关联模型主键、关联关系名称。

9.5K10

分享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...(Role::class); } } 然后当你想用户中添加角色时,可以这样使用: $roleID = 1; $user- roles()- attach($roleID); 默认情况,这个中间不包含时间戳

3.7K31

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

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

3.5K42

Laravel框架实现rbac权限管理操作示例

本文实例讲述了Laravel框架实现rbac权限管理操作。...分享给大家供大家参考,具体如下: 介绍:根据不同权限,在菜单栏显示不同功能,只对菜单进行了限制,若对路由也进行限制,请自行完善 1、建用户、角色、权限用户角色、角色权限) CREATE...', '列表'], ['', '']] $view- with('privileges', $privileges); }); } 4、菜单实现(可以直接遍历一个div,我这里因为有不同样式...</a </div @endif @endforeach 更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》...、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家基于Laravel框架PHP程序设计有所帮助。

82341

深入理解 Laravel Eloquent(三)——模型间关系(关联)

中文文档: http://laravel-china.org/docs/eloquent#relationships 下面我们开始一个一个地学习。...一对一关系 顾名思义,这描述是两个模型之间一对一关系。这种关系是不需要中间。...假如我们有两个模型:User 和 Account,分别对应注册用户和消费者,他们是一对一关系,那么如果我们要使用 Eloquent 提供一对一关系方法,结构应该是这样: user: id ......每一个 Model 中都指定名 2. has one account 这样关系写成 `hasOneAccount()` 而不是简单 `account()` 3....我们可以使用一个重要特性,关系预载入:http://laravel-china.org/docs/eloquent#eager-loading 直接上代码: $users = User::with('

2.6K30

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

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

1.5K41

orm 系列 之 Eloquent演化历程1

此时关系处理上主要逻辑是调用ModelHasOne等关系方法,返回Relation子类,然后通过Relation来处理进而返回数据,这么说可能有点绕,我们下面具体介绍每个关系实现,大家可能就理解了...note:以上分析代码是:git co f6e2170 讲到这,我们列举对象之间关系 One-To-One User 和 Phone1对1关系, class User extends Model...comment where post_id in (1) select id from post where id in (comment.post_id) Many To Many 以user和role为例,一个用户会有不同角色...('App\User'); } } 这个关系我们稍微具体讲,我们在使用上可能会是下面这样子 return $this->belongsToMany('App\Role', 'user_roles...role,joinuser_role 在get时候,其逻辑和HasOne等关系也所有不同,代码如下: // class belongsToMany public function get($columns

1K30

为什么 Laravel 这么优秀?

因为我们已经完成了数据中字段定义、关系、以及最重要一步:如何将数据及数据之间关系写入数据库中,下面简单来介绍下在 Laravel 是如何完成。...Laravel 会自动帮我们处理复杂 Join 操作,还能在一定条件帮我们处理 N+1 问题。...Laravel一个数组保存你注册过所有路由;在进行路由匹配时,Laravel 会用你当前请求 pathinfo 来匹配已经注册所有路由;当你路由数量超级多时,最坏情况你需要 O(n) 次才能找出匹配路由... Java Spring 会在编译时为 Sprint Container 填充不同对象,在使用时就能向容器获取不同值。...我最喜欢 Laravel Container 一点是它支持获取任何对象,即使容器里没有,它也能给你造一个

15210

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

让我们来看看这个版本中一些亮点新特性: 首先,在 TestResponse 类中添加了一个 assertJsonPath() 断言,对于在 JSON 响应中使用针对嵌套属性点符号断言值,这个断言非常方便...($name); $builder- getGlobalMacro($name); $builder- hasGlobalMacro($name); 向 BelongsToMany 关联添加另一个访问方法来获取中间列...此版本中最后一个新更新是允许使用 inputargument 和 inputoption 对象定义命令参数和选项: // 当前样式,仍受支持 protected function getArguments...您可以在下面看到修复完整列表,以及 Github 上 6.0.3 和 6.0.4 之间全部差异。...Laravel 5.8 完整发行说明可在 Github v6 changelog 中找到: Laravel v6.0.4 版本 新增 添加了 TestResponse::assertJsonPath(

1.7K21

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

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

60941

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

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

1.8K00
领券