php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系

通过实例学习Laravel模型中的一对一关联关系

一、前言

Laravel遵循【约定优于配置】的原则。PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一。下面是我的笔记,将用Laravel中的模型关系一步一步探索Laravel框架的魅力。

框架版本:Laravel7

数据表:使用Laravel开箱自带的users表

使用到的数据表:users表与user_profiles表users表:用户表

user_profiles:用户属性信息表

二、创建控制器、模型、数据库

步骤一:创建UserProfile模型与迁移文件php artisan make:model UserProfile -m

// 文件位置

// app/UserProfile.php      # 模型文件位置

// app/database/migrations/2020_06_15_122534_create_user_profiles_table.php

步骤二:编写user_profiles迁移文件并创建表public function up()

{

Schema::create('user_profiles', function (Blueprint $table) {

$table->increments('id');

$table->integer('user_id')->unsigned()->default(0)->unique();

$table->string('bio')->nullable()->comment('个性签名');

$table->string('city')->nullable()->comment('所在城市');

$table->json('hobby')->nullable()->comment('个人爱好');

$table->timestamps();

});

步骤三:运行迁移文件php artisan migrate

步骤四:填充数据(略)。请自行填充数据

三、定义路由Route::get('test01' , 'Home\IndexController@test01');

四、创建控制器php artisan make:controller Home/IndexController

五、使用一对一模型关联(重点)

1)理解:一个用户对应着一个属于自己的属性信息表。换个例子来说,一个男人只有能有一个合法妻子; 如:users用户表存 姓名、手机、性别,user_profiles表存用户的爱好、身高等信息,这两个表之间的关联关系是用users表中的id与user_profiles表中user_id关联; 2)Laravel使用hasOne()方法使用获取自己的属性信息,条件如下:return $this->hasOne($className,$foreignKey=null,$localKey=null);

参数一:要关联的模型类名。               这里指 UserProfile模型

参数二:要关联模型所属表中的外键。       这里指 user_profiles表中的user_id

参数三:关联表的外键。                 这里指 users表中的id

hasOne要关联模型名所对应表的外键与关联表的主键关键

3)belongsTos相对关联,条件如下:return $this->belongsTo(className,$foreignKey=null,$ownerKey=null);

参数一:要关联的模型类名。               这里指 User模型

参数二:当前模型类所属表中的外键。       这里指 user_profiles表中的user_id

参数三:关联模型所属表主键。          这里指 users表中的id

5.1、使用用户获取对应的用户属性信息

步骤一:App/User.php模型中定义hasOne方法// app/user.php

namespace App;

// 推荐写法

public function profile()

{

// 获取用户属性信息

return $this->hasOne(UserProfile::class,'user_id','id');

}

// 不推荐此写法

public function profile1()

{

return $this->hasOne(UserProfile::class);

}

}

步骤二:控制器调用// app/Http/Controllers/Home/indexController.php

namespace App\Http\Controllers\Home;

use App\Http\Controllers\Controller;

use App\User;

use App\UserProfile;

class IndexController extends Controller

{

public function test01()

{

$user = User::find(1);

dd($user->profile);

}

}

5.1、belongsTo通过用户属性信息获取用户信息

步骤一:App/UserProfile.php模型中定义belongsTo方法<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserProfile extends Model

{

// 推荐写法

public function user()

{

// 获取用户信息

return $this->belongsTo(User::class,'user_id','id');

}

// 不推荐此写法

public function user1()

{

return $this->belongsTo(User::class);

}

}

注意:这里是通过动过属性来获取对应的数据,也就是,把模型中定义的关联方法通过动态属性来调用。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年06月15日

转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!

很赞哦!(6)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值