zoukankan      html  css  js  c++  java
  • laravel-模型关联查询的简单使用

    1.模型1对多

    先看一下表的结构

    teacher表

    CREATE TABLE `teacher` (
      `id` int(255) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      `sex` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    teacher表结构代码

    student表(这里定义一个外键t_id)

    CREATE TABLE `student` (
      `id` int(11) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      `sex` varchar(255) DEFAULT NULL,
      `number` int(11) DEFAULT NULL,
      `t_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    student表结构

     1.2在AppModels中定义两个模型1.Teacher.php 2.student.php

    teacher模型

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    
    class Teacher extends Model
    {
        //
        public $table='teacher';
        public function haManyStudent(){
    //        return $this->hasMany('AppModelsStudent','t_id','id');//这两种方法都是一样的使用
          return  $this->hasMany(Student::class,'t_id','id');//这两种方法都是一样的使用
        }
    }
    Teacher 模型代码

    student模型

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    
    class Student extends Model
    {
        //
        public $table='student';
    
    }
    Student 模型

    1.3控制器中调模型

    <?php
    
    namespace AppHttpControllers;
    
    use AppModelsTeacher;
    
    
    class DemoController extends Controller
    {
        //
    
        public function demo()
        {
          $data=Teacher::with('haManyStudent')->get();
          return response()->json($data);//转化为json数据
        }
       
    }
    模型调用

    1.4 传输过来的模型在json中解析结果如下

    2.多对多

    2.1这里建立三张表一张角色表(roles),一张用户表(users),一张外键表(role_user)

     

     

    2.2 数据表结构

    CREATE TABLE `roles` (
      `id` int(11) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色表';
    
    CREATE TABLE `users` (
      `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
    
    CREATE TABLE `role_user` (
      `user_id` int(11) DEFAULT NULL,
      `role_id` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色外键表';
    数据库表

    2.3模型类(第二个参数是关联的外键表)

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    
    class User extends Model
    {
        //
        public $table='users';
        protected $fillable=['name'];
        public function roles(){
            return $this->belongsToMany(Role::class,'role_user','user_id');
        }
    }
    用户表模型
    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentModel;
    
    class Role extends Model
    {
        //
        protected $table='roles';
        protected $fillable=['name'];
        public function User(){
            return $this->belongsToMany(User::class,'role_user','role_id');
        }
    }
    角色模型表

    2.4控制器中代码

      public function index(){
    //        $data=User::with('roles')->get();//打印用户表信息
            $data=Role::with('User')->get();//打印角色表信息
              return response()->json($data);
        }
    View Code

    2.5结果显示如下这里只演示角色表所包含的用户信息

  • 相关阅读:
    easy-ui的data-options用法
    my_note
    定时器
    abp安装
    微信小程序
    几个免费的ui 后台
    abp创建实体的方法
    winform 开源项目
    func委托
    for update 锁行和锁表
  • 原文地址:https://www.cnblogs.com/yaoliuyang/p/12564967.html
Copyright © 2011-2022 走看看