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

Laravel源码分析之模型关联

模型关联在底层帮我们解决好了数据关联和匹配,应用程序中不需要再去写join语句和查询,应用代码可读性和易维护性更高。...按照Laravel设定好模式来写关联模型每个人都能写出高效和优雅代码 (这点我认为适用于所有的Laravel特性)。...WHERE role_user.user_id = 1 远层一对多 Laravel还提供了远层一对多关联,提供了方便、简短方式通过中间关联来获得远层关联。...模型关联常用一些功能底层实现到这里梳理完了,Laravel把我们平常用join, where in 和查询都隐藏在了底层实现中并且帮我们把相互关联数据做好了匹配。...还有一些我认为使用场景没那么多多态关联、嵌套预加载那些我并没有梳理,并且它们底层实现都差不多,区别就是每个关联类型有自己关联约束、匹配规则,有兴趣读者自己去看一下吧。

9.5K10

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

由于前面的 `find(10)` 已经锁定了 id = 10,所以这段函数对应 SQL 为: `select * from account where user_id=10`。...因为这里是 `hasMany`,操作是一个对象集合。 相应 belongsTo() 用法跟上面一对一关系一样: <?...其他关系 Eloquent 还提供 “远层一对多关联”、“多态关联” 和 “多态多对多关联” 这另外三种用法,经过上面的学习,我们已经掌握了 Eloquent 模型间关系基本概念和使用方法,剩下几种不常用方法就留到我们用到时候再自己探索吧...我们可以使用一个重要特性,关系预载入:http://laravel-china.org/docs/eloquent#eager-loading 直接上代码: $users = User::with('...hasOneAccount')->take(10)->get() 这样生成 SQL 就是这个样子: select * from account where id in (1, 2, 3, ... .

2.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

(转) Laravel Eloquent 提示和技巧

hasMany('App\User'); } 但是你知道吗,此时我们已经可以添加 where 或 orderBy 了!...例如,如果您想要某种类型用户(也是通过电子邮件订购)特定关系,您可以这样做: public function approvedUsers() { retrun $this->hasMany...原始查询方法 有时候我们需要在Eloquent查询语句中添加原始查询 // whereRaw $orders = DB::table('orders') ->whereRaw...命令行创建模型同时,创建迁移文件和控制器 laravel创建模型命令大家都很熟悉: php artisan make:model Company 不过你应该了解另外几个很常用参数: php artisan...$q->where('age', '>=', 65); 正确方法有点复杂,使用闭包函数作为查询: $q->where(function ($query) { $query->where('gender

1.5K30

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

Eloquent 模型支持关联关系包括以下七种: 一对一 一对多 多对多 远层一对多 多态关联(一对一) 多态关联(一对多) 多态关联(多对多) 下面我们将以设计一个简单博客系统数据库为例一一介绍上述关联关系...你可能注意到了我们在定义关联关系时,仅仅指定了模型类名,并没有指定通过哪些数据表字段建立关联,这并不是说 Laravel 神通广大,能知过去未来之事,而是因为 Eloquent 对此做了默认约定。...为什么我们不需要指定 Laravel 就能完成这种关联呢,这是因为如果没有指定 $foreignKey,Eloquent 底层会通过如下方法去拼接: public function getForeignKey...和 hasOne 方法一样,hasMany 方法底层也对如何建立关联关系做了约定,而且 hasMany 方法和 hasOne 方法签名一样: public function hasMany($related...'); } 比如博客标签页,通过指定标签查看归属该标签下所有文章,就可以用到类似的关联查询,相应实现代码如下: $tag = Tag::with('posts')->where('name',

9.8K40

跟我一起学Laravel-EloquentORM进阶部分

,这种情况下应该使用一对多关联,使用hasMany方法 <?...) 多态关联使得同一个模型使用一个关联就可以属于多个不同模型,假设这样一个场景,我们有一个帖子表和一个评论表,用户既可以对帖子执行喜欢操作,也可以对评论执行喜欢操作,这样情况下该怎么处理呢?...多对多多态关联 多对多关联使用方法morphToMany和morphedByMany,这里就不多废话了。...App\User::find(1); $user->posts()->where('active', 1)->get(); 如果不需要对关联属性添加约束,可以直接作为模型属性访问,例如上面的例子,...$posts = Post::has('comments.votes')->get(); 如果需要更加强大功能,可以使用whereHas和orWhereHas方法,把where条件放到has语句中

4K50

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系处理以及在 Laravel Administrator...Laravel 提供了四种类型关系: –一对一 –一对多 –多对多 – 多态关系 一对多 一个一对多关系样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。...timestamps = false; /* * 定义一对多关系 */ public function Scoreinfo(){ return $this -> hasMany...> 通过以上步骤处理。表与表之间一对多关系已确立, 以下将介绍在Laravel Administrato 后台中实现 下拉列表查询、绑定等应用 <?...演示样例中多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同表中,但因为我们之前在 Model中已建立了它们之间 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

2.1K40

Laravel学习记录--Model

']; 数据库添加 Model::create(['表字段名'=>'值','字段名'=>'值']) 简单查询 详情访问laravel查询构造器 $model->where()->first()//单行查询...Laravel 自带 软删除功能 就利用全局作用域从数据库中提取「未删除」模型。编写自定义全局作用域可以提供一个方便、简单方法来确保给定模型每个查询都受到一定约束。...,一篇文章会有多个评论 在文章模型使用hasMany() hasMany()与hasOne()语法一致,这里不予介绍 //获取文章评论 public function comments...(){ return $this->hasMany('App\Comment','aid','aid'); } 获取某篇文章记录 public function show...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我另一个博客 - - - Laravel

13.4K20

3分钟短文 | Laravel获取关联表指定列3个方法

今天我们说一说,在Laravel中,如何关联模型,以及制定返回列,以精简返回数据。 学习时间 假如有两个模型 User 和 Post,一个用户会发布多个post,也就是一对多关联关系。...在User模型中,指定此关系: public function post(){ return $this->hasmany('Post'); } 反过来,在Post模型中,必然有一个发布者,是一对一映射...经过框架整合后 SQL 语句大概是这样: select * from `posts` select * from `users` where `users`....关联关系 我们注意到,在关联关系声明上,第一节仅使用了 belongTo,hasMany 这样属性,其实还可以链式调用。这样对于所有使用 with 语句关联模型查询,都会生效。...public function user() { return $this->belongsTo('User')->select(array('id', 'username')); } 特殊性 在Laravel5.5

2K20

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

四、查询构建器Laravel框架中Eloquent ORM提供了方便查询构建器,用于构建复杂查询语句。下面是一些常用查询构建器方法。...where方法where方法用于添加条件查询,例如:$users = User::where('age', '>', 18)->get();上述代码中,查询了年龄大于18岁所有用户。...总结通过上述文档和示例,我们可以看出Laravel框架中Eloquent ORM提供了便捷对象关系映射功能,可以大大简化开发者数据库操作。...关联关系定义需要在对应模型类中定义,例如一对一关联需要在hasOne和belongsTo方法中定义,一对多关联需要在hasMany和belongsTo方法中定义,多对多关联需要在belongsToMany...查询构建器提供了丰富方法来构建复杂查询语句,可以根据具体需求进行使用。

1.5K41

3分钟短文:说说Laravel模型中还算常用2个“关系”

引言 上一章我们介绍了比较简单laravel模型关联关系中一对一,介绍了关联操作方法。...在代码中使用该关联关系: $email = Profile::where('id', 3)->first()->user->email; 其中first方法返回一个Profile模型对象实例,在Profile...比如创建事件时,手动为其指定状态: $event = new Event; $event->name = "Laravel Hacking and Pizza"; $event->state_id =...41; $event->save(); 注意,hasMany关联关系,返回是多个模型集合,可以后续链式调用集合所有方法。...写在最后 本文不失简单地介绍了belongsTo和hasMany两个关联关系,这在代码中仅次于hasOne关系, 使用频次比较高。而效率也就是根据外键多查询一次SQL消耗而已。

2.1K31

Sight——杀手级提升Laravel开发速度组件现在开源了!

今天,给大家推存一个Laravel专用组件:Sight Laravel开发速度可以算是最快了。但是,现在如果加上Sight,那么,你开发速度会更加快。 Sight做了什么呢?...从而让你把从服务器中查出数据轻松转换为可展示数据。自从有了Sight,Laravel成了唯一支持Server SideMVP模式框架。 为什么要用Sight呢? 一、是加快开发速度。...) { $articleArray = ArticleRepository::getList($where); $user_ids = $this->selectFields...虽然是纯数组操作,它一样也有innerJoin和outerJoin,并且,有hasOne,hasMany ...... 当然,还有更多功能,这个你就要仔细看文档了。...Github 地址: https://github.com/BardoQi/Sight Sight——杀手级提升Laravel开发速度组件现在开源了!赶紧FORK,赶紧STAR!

77400

【译】20个 Laravel Eloquent 小技巧(上)

下面是翻译自 Laravel-News 一篇教程,总结了 Laravel 对象关系映射框架(ORM)几个小技巧。...带条件以及排序关联关系模型 通常定义关系模型方法是这样 public function users() { return $this->hasMany('App\User'); }...但你是否知道在定义关系模型时候就已经可以增加 where 或者 orderBy 条件了?...比如说你需要定义一个特定类型用户关联关系并且用邮箱信息来排序,那你可以这么做: public function approvedUsers() { return $this->hasMany...(1)->get(); 是的,你也可以改成任何字段名称,并将其作为后缀附加到“where”,它将神奇产生预想效果(通过魔术方法实现调用)。

2.2K50

3分钟短文:Laravel模型一对一一对多关系真的乱吗?

引言 laravel模型不但提供了可供数据库操作增删改查,还附加了很多功能,最关键要数模型关联关系。本文说一说简单一对一,和一对多关系。用代码说话,让大家更直观地理解。...有同学会疑问, 这中间是靠什么办法关联获取呢?都是数据库条目,一定是走SQL查询了吧? 没错,laravel也的确是这样做。...先查找contacts条目: select * from contacts where 1 limit 1; 然后获取 owner_id 比如等于47,那么接着查找 phone_numbers 表:...例如一个用户有多条通讯录,模型内定义如下: class User extends Model{ public function contacts() { return $this->hasMany...写在最后 本文通过常用用户,通讯录,订单,手机号等模型数据,演示了laravel模型一对一一对多 关联使用方法。 Happy coding :-)

2K30

Laravel 模型操作中一次奇妙踩坑经历

最近被 Laravel 模型中一些小问题折腾死去活来,明明看着很清晰很明了代码,却偏偏不能实现功能,现在带大家来切身经历一下这次奇妙踩坑经历,代码看似很多,实则不多,大家别急着跑,哈哈。...return $this->belongsToMany(User::class); } public function tasks() { return $this->hasMany...$this->belongsToMany(Project::class); } public function tasks() { return $this->hasMany...测试结果很显然是成功,但是大家可能会发现直接操作 relations 或许有些不妥,别急,Laravel 也给我们提供了这样一个方法: ? 现在我们把代码优化一下: ......特别鸣谢: zIym 同学[1] (咱俩一起跨坑,哈哈) 结束语 其实吧最初我也没有想这么多,想了很多其它解决办法,但是都是治根不治本,到头来发现自己对 Laravel 模型工作原理还是不熟悉,只存在简单应用上面

1.6K30

Laravel5.2之模型关联预加载

说明:本文主要说明Laravel Eloquent延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中一些截图和代码黏上去,提高阅读效率。...备注:现在有4张表:商家表merchants、商家电话表phones、商家拥有的店铺shops表和店铺里商品表products。...开发环境:Laravel5.1+MAMP+PHP7+MySQL5.5 先写个店铺列表页 1.先装上开发插件三件套(具体可参考:Laravel5.2之Seeder填充数据小技巧) 不管咋样,先装上开发插件三件套...: composer require barryvdh/laravel-debugbar --dev composer require barryvdh/laravel-ide-helper --dev...把原来N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句执行计划。

2.5K41
领券