一、ORM编程思想

1.1 Active Record 设计模式

Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。应用Active Record时,每一个类的实例对象唯一对应一个数据库表的一行(一对一关系)。你只需继承一个abstract Active Record 类就可以使用该设计模式访问数据库,其最大的好处是使用非常简单

1.2 调试工具 Laravel Debugbar

Installation:

composer require barryvdh/laravel-debugbar --dev

二、一对一关系映射

2.1 创建表

public function up() { Schema::create('profiles', function (Blueprint $table) { $table->increments('id'); $table->string('phone'); $table->unsignedInteger('user_id'); //显示的声明外键:通知数据库根据外键关联表和建立索引,提高运行速度 $table->foreign('user_id') ->references('id') ->on('users') ->onDelete('cascade'); $table->timestamps(); }); }

2.2 创建模型关系

2.2.1 正向关系绑定

public function profile() { return $this->hasOne(Profile::class); }

2.2.2 反向关系绑定

public function user() { return $this->belongsTo(User::class); }

2.3 外键

自定义外键:

return $this->hasOne(Profile::class,'显示指定自定义外键'); 

2.4 一对一测试

依赖注入Request $request,获取当前登录用户$request->user()

Route::get('/test',function (Request $request){ //反向 // $profile = \App\Profile::find(1); // dd($profile->user); $user = $request->user(); // if (is_null($user->profile)){ // $user->profile()->create([ // 'phone' => '15801340269' // ]); // } //用firstOrCreate改进if $user->profile()->firstOrCreate(['user_id' => $user->id],[ 'phone' => '18363046291' ]); //访问属性一样访问方法 dd($user->profile); });

三、一对多关系映射

1:N hasMany(XXX:class) 反之:belongsTo(XXX:class) 

3.1 面向对象方式绑定一对多的关系

四、多对多关系映射

中间表命名:按照A-Z首字母排序

public function users() { return $this->belongsToMany(User::class); } public function habits() { return $this->belongsToMany(Habit::class); }

4.1 面向对象方式绑定多对多的关系

detach解绑,sync方法用的比较多,只保留1,2

4.2 访问多对多中间数据表

五、HasManyThrough对象桥接式穿越关联(远层一对多)

数据表:

countriesid - integername - stringusersid - integer country_id - integer name - string posts id - integer user_id - integer title - string
class Country extends Model { protected $fillable = ['name']; /** * 获得某个国家下所有的用户文章。 */ public function papers() { return $this->hasManyThrough(Paper::class,User::class); } }
$factory->define(App\Paper::class, function (Faker $faker) {return [ 'title' => $faker->sentence, 'user_id' => \App\User::all()->random()->id, ]; });
$factory->define(App\User::class, function (Faker $faker) {return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'country_id' => \App\Country::all()->random()->id, 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret 'remember_token' => str_random(10), ]; });

获取每个国家论文总数:

五、多样化的一对多关系映射(多态关联)

面向对象多态:运行时加载机制

伪造数据:

六、多对多多态关联

除了传统的多态关联,您也可以定义「多对多」的多态关联。例如,Post 模型和 Video 模型可以共享一个多态关联至 Tag 模型。 使用多对多多态关联可以让您在文章和视频中共享唯一的标签列表。

转载于:https://www.cnblogs.com/liliuguang/p/9945657.html

Laravel之Eloquent ORM相关推荐

  1. 【整理】Laravel中Eloquent ORM 关联关系的操作

    Laravel中Eloquent ORM 关联关系的操作 关联数据 定义关联关系 一对一 <?php class User extends Model{// 获取关联到用户的手机public f ...

  2. Laravel 的 Eloquent ORM学习

    创建模型 首先,创建一个 Eloquent 模型,生成的模型通常放在 app 目录中,但你可以通过 composer.json 随意地将它们放在可被自动加载的地方.所有的 Eloquent 模型都继承 ...

  3. Laravel之Eloquent ORM访问器调整器及属性转换

    一.查询构建器的get方法 查询构建器的get方法返回了一个集合$users = App\User::where('active', 1)->get(); foreach ($users as ...

  4. php orm 内存泄漏,Lavarel Eloquent ORM常驻进程下的内存溢出问题

    Laravel 的 Eloquent ORM 提供了漂亮.简洁的 ActiveRecord 实现来和数据库交互.每个数据库表都有一个对应的「模型」用来与该表交互.你可以通过模型查询数据表中的数据,并将 ...

  5. 在ECSHOP中使用laravel框架的orm组件 简化ecshop的二次开发

    在长期的 ecshop二次开发中 我慢慢喜欢上了简单的php开发模式!可能是因为我最早是做前端开发的 ,php+smarty这种简单的组合让我更喜欢!要实现什么功能 只需要写个函数在 includes ...

  6. Laravel Lumen之Eloquent ORM使用速查-基础部分

    使用Eloquent ['eləkwənt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分. 在模型中使用protected成员变量$table指定 ...

  7. [转]Laravel 4之Eloquent ORM

    Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...

  8. 解决laravel框架中Eloquent ORM的save方法无法插入数据的问题

    学习laravel中: 今天在测试使用Eloquent ORM将数据使用 save()方法插入到mysql中时,出现了错误,如图所示: 在网上查阅资料后找到了原因: 使用save方法新增数据: lar ...

  9. laravel组件单独加载(2):模型 Eloquent ORM

    模型组件的加入 目前的项目代码是基于上一个文章的,不知道的可以看上一个文章laravel组件单独加载(1):路由 修改composer.json文件加入模型组件 {"require" ...

最新文章

  1. pycharm ssh mysql_PyCharm使用之配置SSH Interpreter的方法步骤
  2. python中遍历字典判断是否存在_python中如何判断值在不在字典中
  3. ubuntu下C编程,编译基础( 转)
  4. 前端学习(2016)vue之电商管理系统电商系统vue-quill-editor
  5. Python之魔法方法详解
  6. Python游戏汇总:三十个pygame游戏代码【附源码免费分享】
  7. 用差分法求解burger方程 matlab,偏微分方程数值解上机实验.doc
  8. 2021-07-18
  9. 手机电视(CMMB+MBBMS)安全架构原理
  10. 83页XX市高速智慧公路总体建设方案
  11. 互联网/移动互联网小团队创业
  12. 58同成前端面试分析
  13. 2022近视矫正展,护眼产品展,中国爱眼教育大会,验光设备展
  14. iPhone SE3值得入手吗,如今首批用户的评价新鲜出炉
  15. sourcetree 与 命令对比
  16. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定,Java微信公众号开发消息推送公众号用户绑定问题 的解决办法
  17. 保姆级静态网站搭建-阿里云实践
  18. 自学玩编程需要具备哪些能力
  19. 成功解决Error running ‘Application‘: command line is too long
  20. matlab 随机骨料程序,基于matlab的混凝土三维圆形骨料模型随机投放方法.pdf

热门文章

  1. 牛顿法求解非线性方程的根
  2. 细胞如何获得秩序?除了形成细胞器,还可以发生相分离
  3. 剑桥大学发布2019年度AI发展报告,预测未来12个月AI产业6件大事
  4. 中国10大最震撼的无人工厂,你吃的用的都是这么来的!
  5. 报告:下一代技术革命“AI”来袭
  6. 七大科技巨头的最新人工智能布局
  7. 谷歌云TPU服务正式全面开放:「AlphaGo背后的芯片」进入商用化
  8. 乔布斯诞辰67周年,他的这些思想仍值得我们学习
  9. 行走在台北·之二·九份(转载)
  10. SEGGER RTT STOP/SLEEP 模式下使用