通过实例学习Laravel模型中的一对一关联关系

一、前言

Laravel遵循【约定优于配置】的原则。PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一。下面是我的笔记,将用Laravel中的模型关系一步一步探索Laravel框架的魅力。

框架版本:Laravel7

数据表:使用Laravel开箱自带的users表

使用到的数据表:users表与user_profiles表users表:用户表

user_profiles:用户属性信息表

二、创建控制器、模型、数据库

步骤一:创建UserProfile模型与迁移文件php artisan make:model UserProfile -m

// 文件位置

// app/UserProfile.php      # 模型文件位置

// app/database/migrations/2020_06_15_122534_create_user_profiles_table.php

步骤二:编写user_profiles迁移文件并创建表public function up()

{

Schema::create('user_profiles', function (Blueprint $table) {

$table->increments('id');

$table->integer('user_id')->unsigned()->default(0)->unique();

$table->string('bio')->nullable()->comment('个性签名');

$table->string('city')->nullable()->comment('所在城市');

$table->json('hobby')->nullable()->comment('个人爱好');

$table->timestamps();

});

步骤三:运行迁移文件php artisan migrate

步骤四:填充数据(略)。请自行填充数据

三、定义路由Route::get('test01' , 'Home\IndexController@test01');

四、创建控制器php artisan make:controller Home/IndexController

五、使用一对一模型关联(重点)

1)理解:一个用户对应着一个属于自己的属性信息表。换个例子来说,一个男人只有能有一个合法妻子; 如:users用户表存 姓名、手机、性别,user_profiles表存用户的爱好、身高等信息,这两个表之间的关联关系是用users表中的id与user_profiles表中user_id关联; 2)Laravel使用hasOne()方法使用获取自己的属性信息,条件如下:return $this->hasOne($className,$foreignKey=null,$localKey=null);

参数一:要关联的模型类名。               这里指 UserProfile模型

参数二:要关联模型所属表中的外键。       这里指 user_profiles表中的user_id

参数三:关联表的外键。                 这里指 users表中的id

hasOne要关联模型名所对应表的外键与关联表的主键关键

3)belongsTos相对关联,条件如下:return $this->belongsTo(className,$foreignKey=null,$ownerKey=null);

参数一:要关联的模型类名。               这里指 User模型

参数二:当前模型类所属表中的外键。       这里指 user_profiles表中的user_id

参数三:关联模型所属表主键。          这里指 users表中的id

5.1、使用用户获取对应的用户属性信息

步骤一:App/User.php模型中定义hasOne方法// app/user.php

namespace App;

// 推荐写法

public function profile()

{

// 获取用户属性信息

return $this->hasOne(UserProfile::class,'user_id','id');

}

// 不推荐此写法

public function profile1()

{

return $this->hasOne(UserProfile::class);

}

}

步骤二:控制器调用// app/Http/Controllers/Home/indexController.php

namespace App\Http\Controllers\Home;

use App\Http\Controllers\Controller;

use App\User;

use App\UserProfile;

class IndexController extends Controller

{

public function test01()

{

$user = User::find(1);

dd($user->profile);

}

}

5.1、belongsTo通过用户属性信息获取用户信息

步骤一:App/UserProfile.php模型中定义belongsTo方法<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserProfile extends Model

{

// 推荐写法

public function user()

{

// 获取用户信息

return $this->belongsTo(User::class,'user_id','id');

}

// 不推荐此写法

public function user1()

{

return $this->belongsTo(User::class);

}

}

注意:这里是通过动过属性来获取对应的数据,也就是,把模型中定义的关联方法通过动态属性来调用。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年06月15日

转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!

很赞哦!(6)

php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系相关推荐

  1. sequelize模型关联_Node.js Sequelize 模型(表)之间的关联及关系模型的操作

    Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系 ...

  2. python一对一_Python:在数据存储区中建立一对一的关系

    假设我们有两个模型:User和Token.用户可能只有一个令牌,而令牌只能属于一个用户. 来自关系数据库,以下似乎是这样做的方式: class User(db.Model): name = db.St ...

  3. Laravel源码分析之模型关联

    上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的 ...

  4. Laravel核心解读--Database(四) 模型关联

    Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对 ...

  5. 黑马lavarel教程---10、lavarel模型关联

    黑马lavarel教程---10.lavarel模型关联 一.总结 一句话总结: 1.模型关联比较方便,一次定义,后面都可以使用 2.关联关系 使用动态属性进行调用 1.一对多,多对多实例? 一对多: ...

  6. mysql中的自关联详解_Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询)...

    一.一对一关联 一对一关联是很基本的关联.假设一个 User 对应到一个 Phone,phones 表结构如下(通过 user_id 关联 user 表的主键): 1,定义一对一关联 (1)User ...

  7. Django框架(14.Django中模型类的关系,以及模型类关联查询)

    Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...

  8. sequelize模型关联_Sequelize 中文API文档-3. 模型(表)之间的关系/关联

    模型(Model)之间存在各种各样的关系,如:一对一(One-To-One ).一对多(One-To-Many)等.模型间的关系本质上是对其代表的数据库中表之间的关系描述,通过这些关系可以实现数据库中 ...

  9. php模型分页代码,ThinkPHP6.0模型关联分页

    模型关联分页简单案例,标签关联文章,对文章进行分页,上一篇文章写得比较繁琐,这里可以将问题拆解成一对多关系,那么问题就迎刃而解了. 我们可以通过查询tag直接拿到tag_id,通过中间表和文章表关联一 ...

最新文章

  1. R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数
  2. springmvc处理流程
  3. JAVA面试中问及Hibernate与 Mybatis的对比
  4. Makefile中 变量赋值含义
  5. win 8 远程桌面的问题
  6. linux内核 3.1,快更新:Linux新内核发布 支持USB3.1!
  7. jgGrid pivot reload重新加载及刷新数据
  8. Atitit 提升开发效率 通道化驱动化数据操作与查询 目录 1. xiaoguo 1 1.1. Atitit mybatis 简化开发与提升开发效率法 1 2. Code 1 3. ref 4
  9. 小米动态图标+android实现,创新设计动态图标
  10. Java基础语法结构
  11. 抱米花-豆丁文档下载器 20100529
  12. leetcode【中等】781、森林中的兔子
  13. python输入名字、输出_Python输入输出
  14. BZOJ2827: 千山鸟飞绝
  15. 菜鸟Axios学习=官网
  16. 在 Windows10 系统中安装 Homestead 本地开发环境
  17. 安装了Visual Studio Team System Web Access 2008 Power Tool
  18. python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...
  19. centos7虚拟机安装elasticsearch5.0.x-安装篇
  20. FDC2214+FPGA转换芯片使用和配置(非接触液位检测设计)

热门文章

  1. eclipsenbsp;mavennbsp;pluginamp;n…
  2. CDQZ_Training 2012-05-24 聪明的打字员
  3. nodejs的PM2进程管理
  4. jquery概念、引入、选择器
  5. Vue中computed、methods和watch之间的区别
  6. 在PyCharm下使用Jupyter Notebook
  7. swoole服务器主动推消息,实现websocket-主动消息推送laravelswoole
  8. android 5.0 新功能,android5.0新特性
  9. 菜鸟学了SpringBoot后,撸了个博客项目(大神跳过哈)
  10. easyui tab 引用html,jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法