这篇文章主要记录模型的一对一关系,关联关系是Model的一种非常方便的功能。


1 实现一对一关系

1.1 准备工作

首先我们需要创建两张表和对应的两个模型,第一个模型是用户表,第二个模型是账号表。

这里 我们的逻辑是:一个用户信息下只能有一个账号,一个账号只能被一个用户所拥有,这就是一对一关系。

1.1.1 用户信息表

生成模型和迁移文件:

php artisan make:model UserInfo -m

编写迁移文件(表规格):

    public function up()
{
Schema::create('user_infos', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('phone_number'); // 手机号
$table->timestamps();
});
}

编写模型工厂:

// user_info
$factory->define(App\UserInfo::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'phone_number' => $faker->phoneNumber,
];
});

使用seeder:

php artisan make:seeder UserInfoSeeder
    public function run()
{
factory(\App\UserInfo::class, 10)->create();
}
    public function run()
{
Model::unguard();
$this->call('UserInfoSeeder');
Model::reguard();
}

生成数据并使用seeder填入数据:

php artisan migrate:seeder 

1.1.2 账号表

编写迁移文件(表规格):

    public function up()
{
Schema::create('accounts', function (Blueprint $table) {
$table->increments('id');
$table->string('user_name'); // 用户名
$table->integer('user_info_id'); // 关联键
$table->timestamps();
});
}

2 编写关系

首先是账号表,在模型下编写以下代码:

    public function user()
{
return $this->belongsTo(UserInfo::class, 'user_info_id', 'id');
}

代码解读:belongsTo的第二个和第三个参数是完全可以省略的。如果省略了第二个和第三个参数的话 Laravel根据方法名自动填充,会把第二个参数填充成 "user_id" 第三个参数填充 "id",但是我们现在必须这样写,因为我自定义的外键是user_info_id 如果Laravel自动填充的话是找不到这个外键的 所以我们要手动的添加下。

belongsTo的第二个参数是 Account这个模型要用'user_info_id'外键去关联UserInfo模型。

belongsTo的第三个参数是 Account这个模型要关联UserInfo的主键名。

然后是用户信息表:

    public function account()
{
return $this->hasOne(Account::class);
}

代码解读:hasOne的第二个和第三个参数也是完全可以省略的。如果省略了第二个和第三个参数的话 Laravel会自动填充,会把第二个参数填充成 "user_info_id" 第三个参数填充 "id"。

使用:

//    $account = App\Account::find(1);
// dd($account->user); $userInfo = App\UserInfo::find(1);
dd($userInfo->account);

Laravel5.1 模型 --一对一关系的更多相关文章

  1. EntityFramework之一对一关系(二)

    前言 关于表关系园中文章也是数不胜收,但是个人觉得最难攻克的是一对一,对其配置并非无道理可循,只要掌握了原理方可,且听我娓娓道来! 共享主键关系 概念:就是两个表共享相同的主键值,也就是说一表的主键值 ...

  2. hibernate(五) hibernate一对一关系映射详解

    序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...

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

    Eloquent是什么 Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 "对象关系映射"(如果只把它当成 Database A ...

  4. Hibernate学习(五)———— hibernate一对一关系映射详解

    一.一对一关系的概述 一对一关系看起来简单,其实也挺复杂的.其中关系就包含了四种,单向双向和主键关联外键关联. 什么意思呢,也就是包含了单向一对一主键关联.双向一对一主键关联,单向一对一外键关联,双向 ...

  5. 数据库系统概论——从E-R模型到关系模型

    E-R模型和关系模型都是现实世界抽象的逻辑表示 E-R模型并不被 DBMS直接支持,更适合对现实世界建模 关系模型是 DBMS直接支持的数据模型 基本 E-R图中的元素包括实体集.联系集.属性 椭圆框 ...

  6. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...

  7. 9.Configure One-to-One(配置一对一关系)【Code-First系列】

    现在,开始学习怎么配置一对一的关系,众所周知,一对一的关系是:一个表中的主键,在另外一个表中,同时是主键和外键[实际上是一对零或者一对一]. 请注意:一对一的关系,在MS SQL Server中,技术 ...

  8. 数据库系统原理——ER模型与关系模型

    原文链接: http://blog.csdn.net/haovip123/article/details/21614887 犹记得第一次看<数据库系统原理>时看天书的感觉,云里雾里:现在已 ...

  9. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

随机推荐

  1. 【java】为数组全部元素赋同样的值 以及 数组之间的复制

    为数组全部元素赋同样的值 : boolean[] resArray=new boolean[100]; Arrays.fill(resArray, true); 数组之间的复制: System.arr ...

  2. Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示

    本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中几个基础的概念和专门用于机器学习的数据类型 特征向量Vector: Vector的概念是和数学中的向量 ...

  3. Android中的Service组件具体解释

    Service与Activity的差别在于:Service一直在后台执行,他没实用户界面,绝不会到前台来. 一,创建和配置Service 开发Service须要两个步骤:1.继承Service子类,2 ...

  4. Selenium webdriver Java 开始

    最早接触的selenium是 selenium IDE,当时是为了准备论文.为了用IDE还下载了Firefox浏览器.后来接触过两个项目都需要selenium,一个采用selenium webdirv ...

  5. Python——Code Like a Pythonista: Idiomatic Python

    Code Like a Pythonista: Idiomatic Python 如果你有C++基础,那学习另一门语言会相对容易.因为C++即面向过程,又面向对象.它很底层,能像C一样访问机器:它也很 ...

  6. Ubuntu——修正LibreOffice中文乱码以及eclipse提示框颜色

    刚进ubuntu的时候就老遇到用libreoffice打开某些文档时出现一堆叠在一起的乱码.以及最開始使用eclipse编辑时,鼠标放到一个变量或者函数时 弹出来一黑框框-看的难受的.... 这里记录 ...

  7. 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)

    [JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...

  8. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  9. C++语言基础(8)-引用

    (重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...

  10. 141. Linked List Cycle【easy】

    141. Linked List Cycle[easy] Given a linked list, determine if it has a cycle in it. Follow up:Can y ...