Laravel5.1 框架模型一对一关系实现与使用方法实例分析
本文实例讲述了Laravel5.1 框架模型一对一关系实现与使用方法。分享给大家供大家参考,具体如下:
这篇文章主要记录模型的一对一关系,关联关系是Model的一种非常方便的功能。
1 实现一对一关系
1.1 准备工作
首先我们需要创建两张表和对应的两个模型,第一个模型是用户表,第二个模型是账号表。
这里 我们的逻辑是:一个用户信息下只能有一个账号,一个账号只能被一个用户所拥有,这就是一对一关系。
1.1.1 用户信息表
生成模型和迁移文件:
?1 | php artisan make:model UserInfo -m |
编写迁移文件(表规格):
?1 2 3 4 5 6 7 8 9 | public function up() { Schema::create( 'user_infos' , function (Blueprint $table ) { $table ->increments( 'id' ); $table ->string( 'name' ); $table ->string( 'phone_number' ); // 手机号 $table ->timestamps(); }); } |
编写模型工厂:
?1 2 3 4 5 6 7 | // user_info $factory ->define(App\UserInfo:: class , function (Faker\Generator $faker ) { return [ 'name' => $faker ->name, 'phone_number' => $faker ->phoneNumber, ]; }); |
使用seeder:
?1 | php artisan make:seeder UserInfoSeeder |
1 2 3 4 5 6 7 8 9 10 | public function run() { factory(\App\UserInfo:: class , 10)->create(); } public function run() { Model::unguard(); $this ->call( 'UserInfoSeeder' ); Model::reguard(); } |
生成数据并使用seeder填入数据:
?1 | php artisan migrate:seeder |
1.1.2 账号表
编写迁移文件(表规格):
?1 2 3 4 5 6 7 8 9 10 | public function up() { Schema::create( 'accounts' , function (Blueprint $table ) { $table ->increments( 'id' ); $table ->string( 'user_name' ); // 用户名 $table ->integer( 'user_info_id' ); // 关联键 $table ->timestamps(); }); } |
2 编写关系
首先是账号表,在模型下编写以下代码:
?1 2 3 4 | 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的主键名。
然后是用户信息表:
?1 2 3 4 | public function account() { return $this ->hasOne(Account:: class ); } |
代码解读:hasOne的第二个和第三个参数也是完全可以省略的。如果省略了第二个和第三个参数的话 Laravel会自动填充,会把第二个参数填充成 "user_info_id" 第三个参数填充 "id"。
使用:
?1 2 3 4 | // $account = App\Account::find(1); // dd($account->user); $userInfo = App\UserInfo::find(1); dd( $userInfo ->account); |
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/sun-kang/p/7524085.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。