laravel9框架一对一模型关联快速入门

模型关联在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 条评论) “”
   
验证码:

相关文章

推荐文章