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

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础CRUD方法实现,Eloquent Model除了基础CRUD还有一个很重要部分叫模型关联,它通过面向对象方式优雅地把数据之间关联关系抽象到了...Eloquent Model让应用依然能用Fluent Api方式访问和设置主体数据关联数据。...;//关联模型Role主键在中间role_id $this->foreignPivotKey = $foreignPivotKey;//父模型Role主键在中间user_id...id $this->firstKey = $firstKey;//用户country_id $this->secondKey = $secondKey;//文章...,接下来通过 getEager方法获取所有的关联模型组成集合,再通过关联类里定义match方法把键值等于父模型主键值关联模型组织成集合设置到父模型 $relations属性接下来用到了这些预加载关联模型时都是

9.5K10

Laravel代码简洁之道和性能优化

IGNORE 支持 先简单说明一下业务场景: 首先结构设计是:互相喜欢和添加联系人都是双向关系,即入库A B,B A这样成对双向数据 触发互相喜欢,插入2条双向数据,插入之前校验是否存在,存在不重复添加...第二个参数是唯一标识记录列。除 SQL Server 所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新列作为第三个参数(可选)。默认情况下,将更新所有列。...作为使用复合和原始表达式示例,请考虑以下表,该计算每个帖子和每天访问者: Schema :: create ( 'stats' , function ( Blueprint $ table )...当然了还是有一些注意点和坑,下面分享一下 注意问题 要根据需求添加唯一索引 根据官方文档说明,我们model必须添加这行代码,才能以Eloquent方式用 use \Staudenmeir\...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

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

Laravel Eloquent 模型关联关系(下)

性能上来说,渴求式加载更优,因为它会提前数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程如果想优化性能...,如果返回文章结果是列表的话,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据连接是短连接,每次都要重新连接数据库,所以性能角度考虑不建议使用这种方式...>orderBy('created_at', 'desc'); }]); 关联插入与更新 一对多关联记录插入 新增关联模型时候,可以在父模型上调用相应方法直接插入记录到数据库,这样做好处是不需要指定关联模型与父模型关联字段值...如果是要更新新创建模型实例所属模型(父模型)字段,比如以 posts 为例,新增记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...空对象模型 如果字段 user_id 允许为空的话,当我们访问 Post 模型上 author 属性时,默认返回为 null。

19.5K30

Laravel学习记录--Model

Laravel 自带 软删除功能 就利用全局作用域数据库中提取「未删除」模型。编写自定义全局作用域可以提供一个方便、简单方法来确保给定模型每个查询都受到一定约束。...public function show(){ $res=Muser::find(1)->phone; //在phones查找uid(uid=1)与musers主键uid...,在本例按照默认拼接规则为 当前模型类名_id;这里就是(Countrie_id)secondKey:中间模型类与关联模型类关联,如果不指定,在本例按照默认拼接规则为关联模型类_id;这里就为...$name:关联名称,在定义数据库迁移时通过morphs指定名称一致 $table:中间名称,默认为$name复数形式 $foreignPivotKey:当前模型在中间,默认拼接规则为...$name:关联名称,在定义数据库迁移时通过morphs指定名称一致 $table:中间名称,默认为$name复数形式 $foreignPivotKey:关联模型在中间,默认拼接规则为

13.4K20

最为常用Laravel操作(1)-Eloquent模型

快速入门 更换名 protected $table = 'my_flights'; 更换主键名称 protected $primaryKey = 'id'; 注意: Eloquent 默认主键字段是自增整型数据...关闭时间戳记录 public $timestamps = false; 获取模型数据 // Eloquent all 方法返回模型所有结果 $flights = App\Flight::all(...) { // Post : 关联模型 // Comment : post_id // Post : id 父模型主键...]); // 从中间移除相应记录: 指定用户移除某个角色 $user->roles()->detach($roleId); // 从中间移除相应记录: 指定用户移除所有角色 $user->...例如, 你可能想要使用 Laravel 加密器对存储在数据数据进行加密, 并且在 Eloquent 模型访问时自动进行解密.

27200

Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解

Laravel 5.5+开始,加入了API Resources这个概念。...如果你熟悉使用API进行输出,构架前后端分离网络应用,那么你应该会发现,当我们使用Eloquent数据取出数据后,如果想以JSON格式进行输出,那么我们可以使用- toJson()这个方法,这个方法可以直接将我们...那么在ShippingAddress对应数据shipping_addresses,我们可能会有如下定义: | id | country_id | province_id | city_id |...address | 字段类型我就不赘述了,其中country_id、province_id以及city_id这三个分别对应了国家、省份以及城市id。...而Customer对应customers,会有shipping_address_id这个键指向shipping_addressesid。

4.4K30

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

场景 用户之间相互关注,记录这种关系是followers(follower_id 发起关注的人 followed_id被关注的人) 现在多对多关系就不再是传统三张关系了, 这种情况 多对多关系应该怎么声明呢...分析 laravel或者其他框架多对多关系 一般都是由Model1 Model2 Model1_Model2(声明两者关系)来组成, 但是上面的场景 却是只有两张,这时候就要研究下官方文档了...; 当然是支持 参考资料 https://laravel.com/docs/5.6/eloquent-relationships#many-to-many In addition to customizing...以达到个性化需求, 第一个参数是 第二个Model 第二个参数是 关系名 第三个参数是 第一个Model在关系ID 第四个参数是 第二个Model在关系ID 解决...关系名是 ‘followers’ /** * 关注当前用户 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany

1.2K31

Laravel系列4.3】模型Eloquent ORM使用(一)

Active Record 中文意思是活动记录,特点是一个模型类对应数据一个。...对于 Laravel 中标准 Eloquent 模型类来说,每个都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据创建时间和修改时间...在标准数据库结构,我们是有主外概念,但是,说实话,在 MySQL 中使用主外情况还真的是非常少。之前似乎有印象说 MySQL 不是很推荐通过主外来建立之间联系。...之所以要有这个东西,主要也是为了数据之前能够在数据库层面保持一定关联,这样我们就可以做一些特殊操作,比如说定义数据事件或者定时任务之类,或者在关联删除时候能够更加有效率。...这样做原因也正是为了保持数据一致性和完整性。 当然,在 Laravel ,可以不在数据库层面进行严格设置,就可以在框架代码实现主外关联。

8.8K20

Django创建、字段属性简介、脏数据概念、子序列化

假设图书管理系统书、出版社、作者、作者详细信息四张之间关系如下: """ 关系 1)Book 和 Publish 一对多:在多一方 Book 2)Book 和 Author 多对多:在查询频率高一方...,将两张设置为级联,并将反向查询字段名设置为detail 数据数据介绍 数据库中常见并发操作所带来了一致性问题包括:丢失修改,不可重复读,读“脏”数据,幻读。...b.事物A按一定条件数据读取了某些数据后,事物B删除了其中部分记录,当A再次以相同条件读取时,发现某些记录消失了。 3.脏读:一个事物读取了另一个事物未提交数据。...a.事物A按一定条件数据读取某些数据记录后,事物B插入了一些记录,当B再次按照相同条件读取数据时,发现多了一些记录。(也叫做幻影读)。...如果涉及到通过进行跨查询,然后再将查询数据反序列化到前台就需要用到子序列化,比如下面的例子:我们查询出版社信息时候连带将book该出版社所出版过书名一并查出来。

4.3K30

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

,第二个参数是关联模型类所属,这里对应是 user_profiles user_id 字段,第三个参数是关联关联到当前模型所属哪个字段,这里对应是 users id...第二个参数是当前模型类所属,在本例是 user_profiles user_id 字段,拼接规则和 hasOne 那里类似,只不过这里是基于第四个参数关联关系名称 $relation:...,数据库查询优化角度来说,显然是不合理。...), 第三个参数是 $foreignPivotKey 指的是中间当前模型类,默认拼接规则和前面一对一、一对多一样,所以在本例是 posts post_id 字段。...第四个参数 relatedPivotKey 是中间当前关联模型类,拼接规则和 foreignPivotKey 一样,只不过作用于关联模型类,所以在本例是 tags tag_id 字段。

9.8K40

laravel model 两联查示例

定义好关联之后,就可以使用 Eloquent 动态属性取得关联对象: $phone = User::find(1)- phone; SQL 会执行如下语句: select * from users where...id = 1 select * from phones where user_id = 1 注意, Eloquent 假设对应关联模型数据库表里,键名称是基于模型名称。...在这个例子里,默认 Phone 模型数据会以 user_id 作为。如果想要更改这个默认,可以传入第二个参数到 hasOne 方法里。...更进一步,您可以传入第三个参数,指定关联要对应到本身哪个字段: return $this- hasOne('App\Phone', 'foreign_key'); return $this-...model 两联查示例就是小编分享给大家全部内容了,希望能给大家一个参考。

1.3K21

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

说明:本文主要聊一聊Laravel测试数据填充器Seeder小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程一些截图和代码黏上去,提高阅读效率。...* * @return void */ public function down() { //删除时要删除外约束,参数为键名称...Tag是多对多关系,还需要一张存放两者关系: //多对多关系,中间命名laravel默认按照两张表字母排序来,写成tag_post会找不到中间 php artisan make:migration...,关系如下: Seeder填充测试数据 好,在聊到seeder测试数据填充之前,看下开发插件三件套能干些啥,下文中命令可在项目根目录输入php artisan指令列表查看。...迁移Migration和关联Relationship都已设计好,测试数据也已经Seeder好了,就可以根据Repository模式来设计一些数据库逻辑了。

3.5K42

orm 系列 之 Eloquent演化历程2

'); // 文件获取migrate files $files = $this->getMigrationFiles($path); // 获取已经执行migration...tag v1.1.1版本eloquent, git co v1.1.1 此版本是v4.0.0之前一个版本,从这以后laravel会以组件形式组织各个功能,让我们分析下v1.1.1版本,目前具有哪些功能...本文最后讲下Eloquent中新增对象之间关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 结构 多态关联允许一个模型在单个关联下属于多个不同模型...Manager,记得网上搜索过关键字Using Eloquent outside Laravel,我们可以看到一篇Vivek Kumar Bansal写文章,文章2方面介绍了怎么使用Eloquent...User extends Eloquent { // } 此处Eloquent已经通过初始化设置了静态变量$resolver,我们可以方便获取连接Connection了,也就是有了数据库操作功能

2.4K30

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

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架 Eloquent 对一对多关系处理以及在 Laravel Administrator...您数据库可能是彼此相关。比方,一篇博客文章可能有很多评论,或者一个订单与下订单用户相关。Eloquent 使得管理和处理这些关系变得简单。...)、学生信息(StuInfo)有主外关系 * 而且是一对多关系 */ public function StuInfo(){...> 通过以上步骤处理。之间一对多关系已确立, 以下将介绍在Laravel Administrato 后台中实现 下拉列表查询、绑定等应用 <?...演示样例多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同,但因为我们之前在 Model已建立了它们之间 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

2.1K40

Laravel5.7 Eloquent ORM快速入门详解

简介 Laravel 内置 Eloquent ORM 提供了一个美观、简单数据库打交道 ActiveRecord 实现,每张数据都对应一个与该进行交互模型(Model),通过模型类,你可以对数据进行查询...,让我们来看一个 Flight 模型例子,我们将用该类获取和存取数据 flights 信息: <?...时间戳 默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据,如果你不想要这些 Laravel 自动管理数据列,在模型类设置 $timestamps...* * @var string */ protected $connection = 'connection-name'; } 获取模型 创建完模型及其关联数据后,就可以数据获取数据了...软删除 除了数据库物理删除记录Eloquent 还可以对模型进行“软删除”。

15K41

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

这是我是文章【articles】、标签【tags】以及关系【article_tag】 其中关系命名是[article_tag]而不是tag_article 因为laravel默认是以字母升序排列...这里有,但是是其他,不关我们这里要讲。 新建标签 php artisan make:model Model/Tag -m 我是新建模型时候就顺带穿件迁移了。 ?...这里有两个,分别是文章主键和标签主键。...包含article_id一样记录也删除 执行迁移 php artisan migrate 声明Eloquent关系 Article ?...我们使用 $this->belongsToMany() 来表明Eloquent关系,这里需要注意是如果你并不是 article_id 和 tag_id ,你需要在第三个参数进行设置,写成类似下面这样

1.8K00

laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。...分享给大家供大家参考,具体如下: 1、连接数据laravel连接数据配置文件位于config/database.php,在其中connection字段包含laravel所支持数据配置信息...Laravel内置Eloquent ORM提供了一种便捷方式帮助你组织数据数据,每张数据都对应一个与该进行交互模型(Model),通过Model类,你可以对数据进行查询、插入、更新、删除等操作...Eloquent默认会管理数据创建时间、更新时间,对应数据created_at、updated_at字段,你需要在创建时包含这两个字段。...()、first()来获取数据 通过上面的增删改查可以看出Eloquent可以使用查询构建器所有方法,除了增删改查,还有where、聚合函数等。

13.3K51

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

引言 laravel模型不但提供了可供数据库操作增删改查,还附加了很多功能,最关键要数模型关联关系。本文说一说简单一对一,和一对多关系。用代码说话,让大家更直观地理解。...,且内有一个字段名 contacts_id 作为。...如果这个不是 contacts_id,那就手动指定: return $this->hasOne(PhoneNumber::class, 'owner_id'); 使用 phone_numbers ...有同学会疑问, 这中间是靠什么办法关联获取呢?都是数据条目,一定是走SQL查询了吧? 没错,laravel也的确是这样做。...Eloquent Collection,例如: $user = User::first();$usersContacts = $user->contacts; 是集合就可以充分利用集合函数方法操作数据

2K30
领券