欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-09 18:42:58
本文实例讲述了laravel5.1 框架模型一对一关系实现与使用方法。分享给大家供大家参考,具体如下: 这篇文章主要记录模型的一对一关系,关联关系是model的一种非常方便的功能。...

本文实例讲述了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);