模型关联在laravel框架中很常见,需要搞清楚到底谁关联谁,也就是说谁是主表谁是从表,
例如去银行办业务,需要用到排队编号,一个客户对应一个编号,从客户表中通过编号ID查询编号,那么就是客户关联编号,客户是主,编号是从。这种是典型的一对一模型关系。
下面让我们先来新建一个客户表和排队编号的生成文件。
执行命令:
php artisan make:migration create_clients_table
php artisan make:migration create_nums_table
执行上面命令后,发现已经生成了两个文件:
接下来,我们需要进一步设计设计表结构,关于生成文件的可用字段类型,Illuminate\Database\Schema\Blueprint 提供了多种方法,Blueprint.php的路径是:\vendor\laravel\framework\src\Illuminate\Database\Schema。
2022_08_29_073411_create_clients_table.php中新增
public function up()
{
Schema::create('clients', function (Blueprint $table) {
$table->id();
$table->string("client_name");//客户名称
$table->integer('n_id');//关联编号ID
$table->timestamps();
});
}
2022_08_29_073429_create_nums_table.php中新增:
然后执行迁移命令:php artisan migrate
查看数据库,可以看到这两个表已经生成:
添加数据:
接下来我们新建两个模型:
执行命令:
php artisan make:model Clients
php artisan make:model Nums
可以看到两个模型文件已经生成。
需要对这两个模型进行进一步设计代码:
protected $table = "clients";
public $timestamp = false;
//一对一的关系
public function num(){
return $this->hasOne('App\Models\Nums','id','n_id');
}
public function test1(){
$list = $this->get();
foreach($list as $val){
echo $val->id."
".$val->client_name."
"."对应编号:".$val->num->num_name."
";
}
}
新建控制器ClientController
php artisan make:controller ClientController
然后在控制器中添加:
//一对一模型关系
public function oneToOne(){
$client = new Clients();
$list = $client->test1();
dd($list);
}
在路由文件web.php中添加
//一对一模型关系演示
Route::any('one-to-one',[ClientController::class,'oneToOne']);
用浏览器打开进行验证http://127.0.0.1:8000/one-to-one,可以看到以下效果:
说明一对一模型是成功的,这一节就介绍到这里,下一节将介绍一对多的关系。
留言与评论(共有 0 条评论) “” |