前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel5.1 框架模型一对一关系实现与使用方法实例分析

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

作者头像
砸漏
发布2020-10-20 10:46:19
1.4K0
发布2020-10-20 10:46:19
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

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

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

1 实现一对一关系

1.1 准备工作

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

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

1.1.1 用户信息表

生成模型和迁移文件:

代码语言:javascript
复制
php artisan make:model UserInfo -m

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

代码语言:javascript
复制
  public function up()
  {
    Schema::create('user_infos', function (Blueprint $table) {
      $table- increments('id');
      $table- string('name');
      $table- string('phone_number');     // 手机号
      $table- timestamps();
    });
  }

编写模型工厂:

代码语言:javascript
复制
// user_info
$factory- define(App\UserInfo::class, function (Faker\Generator $faker) {
  return [
    'name' =  $faker- name,
    'phone_number' =  $faker- phoneNumber,
  ];
});

使用seeder:

代码语言:javascript
复制
php artisan make:seeder UserInfoSeeder
代码语言:javascript
复制
  public function run()
  {
    factory(\App\UserInfo::class, 10)- create();
  }
  public function run()
  {
    Model::unguard();
    $this- call('UserInfoSeeder');
    Model::reguard();
  }

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

代码语言:javascript
复制
php artisan migrate:seeder 
1.1.2 账号表

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

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

2 编写关系

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

代码语言:javascript
复制
  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的主键名。

然后是用户信息表:

代码语言:javascript
复制
  public function account()
  {
    return $this- hasOne(Account::class);
  }

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

使用:

代码语言:javascript
复制
//  $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程序设计有所帮助。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 实现一对一关系
    • 1.1 准备工作
      • 1.1.1 用户信息表
      • 1.1.2 账号表
  • 2 编写关系
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档