laravel 反向一对一_Laravel5.1 模型 --一对一关系

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

1 实现一对一关系

1.1 准备工作

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

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

1.1.1 用户信息表

生成模型和迁移文件:

php artisan make:model UserInfo -m

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

public functionup()

{

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 functionrun()

{

factory(\App\UserInfo::class, 10)->create();

}

public functionrun()

{

Model::unguard();$this->call('UserInfoSeeder');

Model::reguard();

}

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

php artisan migrate:seeder

1.1.2 账号表

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

public functionup()

{

Schema::create('accounts', function (Blueprint $table) {$table->increments('id');$table->string('user_name'); //用户名

$table->integer('user_info_id'); //关联键

$table->timestamps();

});

}

2 编写关系

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

public functionuser()

{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 functionaccount()

{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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值