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站长网) |
相关内容
网友评论
推荐文章
热点阅读