专栏首页恩蓝脚本Laravel5.1 框架模型一对一关系实现与使用方法实例分析

Laravel5.1 框架模型一对一关系实现与使用方法实例分析

本文实例讲述了Laravel5.1 框架模型一对一关系实现与使用方法。分享给大家供大家参考,具体如下:

这篇文章主要记录模型的一对一关系,关联关系是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);

更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP实现的数据对象映射模式详解

    如果这时候我们将Data.php修改为Data1.php,那么在不使用工厂模式的时候就要一个一个的去修改类名,现在只需要在工厂模式中修改一下就好了,我们也可以打...

    砸漏
  • 使用Dajngo 通过代码添加xadmin用户和权限(组)

    写view的时候,直接继承LoginRequiredMixin,如果未登录,则跳转到登陆页面

    砸漏
  • Yii框架实现对数据库的CURD操作示例

    本文实例讲述了Yii框架实现对数据库的CURD操作。分享给大家供大家参考,具体如下:

    砸漏
  • lua

    数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log, log10),...

    radaren
  • 火绒安全软件评测 | WitAwards 2016 「 年度安全产品」参评巡礼

    *本文原创作者: ArthurKiller,本文属“WitAwards 2016年度安全评选”专题报道,未经许可禁止转载 火绒,国内一款新兴的免费杀毒软件。该软...

    FB客服
  • 关于火绒的12个技术问题

    近日有卡饭网友向火绒提出12个问题,从产品性能到核心技术。这些问题非常棒,无论提问者是网友还是友商,火绒团队都非常愿意一起探讨。我们尝试一一作答如下。

    用户6477171
  • 电脑弹窗拦截小帮手

    平常我们在工作、学习或者生活在使用电脑的时候,经常有一些弹窗来打搅我们与电脑得快乐玩耍时间。这些弹窗也经常让我很头痛。在我认为对这些弹窗无可奈何得时候,终于让我...

    code随笔
  • 记一次火绒帮助企业用户分析日志:仅一个月遭遇近万次漏洞攻击

    企业网络环境错综复杂,包括终端管理混乱,对U盘、外设、共享文件夹等公用资源缺乏防护,员工安全意识良莠不齐等,都容易导致病毒能够轻易入侵终端和服务器。部分企业在安...

    用户6477171
  • daemon函数结合脚本实现start, stop, restart

    1. daemon函数 Daemon程序是一直运行的服务端程序,又称为守护进程。通常在系统后台运行,没有控制终端不与前台交互,Daemon程序一般作为系统...

    一灰灰blog
  • 最好用的电脑杀毒软件-火绒安全告别流氓软件

    哈喽各位小伙伴大家早,我是橙c。昨天从工作了几年的公司辞职打了几个电话得到了朋友的鼓励鼓起了勇气辞职了。

    IT小侠公社

扫码关注云+社区

领取腾讯云代金券