zoukankan      html  css  js  c++  java
  • laravel使用 面向对象的方式绑定多对多的关系

    创建model文件,并且一起创建migration文件:

    php   artisan  make:model Habit  -m

    创建多对多的中间表的方法:

    php artisan make:migration create_habit_user_table --create=habit_user

    设计habit_user:

    $table->unsignedInteger('user_id');

    $table->unsignedInteger('habit_id');

    模型中定义多对多:

    user模型:

    public function habits(){

      return $table->belongsToMany(Habit::class);

    }

    /*

    belongsToMany参数说明:

    第一个参数是 第二个Model 
    第二个参数是 关系表名 
    第三个参数是 第一个Model在关系表中的外键ID 
    第四个参数是 第二个Model在关系表中的外键ID

    */

    Habit模型:

    public function users(){

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

    }

    实现多对多关系:

    第一种方法:attach(不会删除之前的数据,只会把新添加的数据加上去)

    //通过面向对象的方式绑定文章和标签:
    $label1=AppLabel::create(['name'=>'Python']);
    $label2=AppLabel::create(['name'=>'Java']);
    $article=AppArticle::first();
    $article->labels()->attach([
    $label1->id,
    $label2->id
    ]);
    dd($article->labels);

    第二种方法:sync(使用sync会和数据库同步,只会保留我们填写的id项,其他的项都会删除掉)
    $label1=AppLabel::create(['name'=>'Python']);
    $label2=AppLabel::create(['name'=>'Java']);
    $article=AppArticle::first();
    $article->labels()->sync([
    $label1->id,
    $label2->id
    ]);
    dd($article->labels);

    解绑的方法使用detach,只需要传入需要解绑的数据id就可以了
  • 相关阅读:
    eIQ WSL下工具及环境配置
    WSL配置高翔vslam环境配置流水账
    机器学习原理/模型/应用
    Spring+Quartz(定时任务)
    vim常用操作
    Linux使用ssh公钥实现免密码登录Linux
    svn常用操作
    Jquery Html方法失效的问题
    运算符&&与||的用法
    CSS强制不换行[转帖]
  • 原文地址:https://www.cnblogs.com/yiweiyihang/p/10459056.html
Copyright © 2011-2022 走看看