• 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(AppUserInfo::class, function (FakerGenerator $faker) {
        return [
            'name' => $faker->name,
            'phone_number' => $faker->phoneNumber,
        ];
    });

    使用seeder:

    php artisan make:seeder UserInfoSeeder
        public function run()
        {
            factory(AppUserInfo::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 = AppAccount::find(1);
    //    dd($account->user);
    
        $userInfo = AppUserInfo::find(1);
        dd($userInfo->account);
  • 相关阅读:
    (转)eclipse安装jetty
    (转)Java compiler level does not match解决方法
    (转)关于eclipse的TestNG的插件安装方法
    win7 远程桌面连接过程
    (转)IntelliJ IDEA 破解方法
    (转) Eclipse Maven 编译错误 Dynamic Web Module 3.1 requires Java 1.7 or newer 解决方案
    (转)@ContextConfiguration注解说明
    (转)java中/r与/n还有/r/n的区别
    (转)eclipse导入Gradle项目
    tomcat架构分析(valve机制)
  • 原文地址:https://www.cnblogs.com/sun-kang/p/7524085.html
Copyright © 2020-2023  润新知