设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 综合聚焦 > 编程要点 > 正文

laravel完成一对一关系的方法是什么?

发布时间:2022-02-16 15:47 所属栏目:13 来源:互联网
导读:本文主要给大家分享的是关于laravel框架模型一对一关系的内容,主要介绍一对一关系的实现以及使用,感兴趣的朋友可以参考学习,下面就跟随小编一起来看看吧。 1 实现一对一关系 1.1 准备工作 首先我们需要创建两张表和对应的两个模型,第一个模型是用户表,
       本文主要给大家分享的是关于laravel框架模型一对一关系的内容,主要介绍一对一关系的实现以及使用,感兴趣的朋友可以参考学习,下面就跟随小编一起来看看吧。
 
       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 一对一关系内容,大家可以继续关注其他文章。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读