• Laravel 模型的关联写入&多对多的关联写入 ⑩③


    请添加图片描述

    @作者 : SYFStrive

     
    请添加图片描述

    @博客首页 : HomePage

    📜: THINK PHP

    📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

    📌:觉得文章不错可以点点关注 👉:专栏连接🔗


    请添加图片描述
    相关专栏

    👉 VUEJS(🔥)
    👉 MYSQL(🔥)
    👉 微信小程序(🔥)
    👉 PHPMYSQL(🔥)
    👉 UNIAPP开发(🔥)


                        ⡖⠒⠒⠒⠤⢄⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
    ⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
    ⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
    ⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
    ⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
    ⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
    ⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
    ⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
    ⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
    ⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
    ⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
    ⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
    ⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    提示:以下是本篇文章正文内容

    PHP LARAVEL 简介

    • Laravel是一种流行的开源PHP Web应用程序框架,由Taylor Otwell在2011年创建并发布。它提供了一个简洁优雅的语法和丰富的功能集,旨在使Web开发过程更快速、简单和愉悦。
    1. MVC架构模式:Laravel采用了MVC(Model-View-Controller)架构模,将应用程序的逻辑分为不同的层,提高了代码的可维护性和可测试性。

    2. 简洁的语法和表达力:Laravel框架支持具有简洁而表达力的语法,使得编写清晰、易读、易维护的代码成为可能。

    3. 路由系统:它提供了一个强大且灵活的路由系统,通过简单的配置和代码即可定义Web应用程序的路由规则,实现URL到控制器的映射。

    4. 数据库抽象层:Laravel提供了一个简便的数据库抽象层,支持多种数据库系统,并通过Eloquent ORM提供了一种优雅的方法来与数据库进行交互。

    5. 权限和认证系统:Laravel提供了内置的身份验证和授权功能,使得实现用户身份验证、访问控制和权限管理变得简单和便捷。

    6. 缓存系统:Laravel支持多种缓存后端,包括文件、数据库、Memcached和Redis等,让你可以轻松地实现缓存数据,提升应用程序的性能。

    7. 强大的扩展性:Laravel通过Composer和Packagist等工具提供了丰富的扩展包生态系统,可以快速集成各种功能组件和第三方库,加快开发进程。

    8. 测试支持:Laravel鼓励编写和运行测试,提供了一套丰富的测试工具和断言,帮助开发者确保代码的质量和可靠性。

    • 总的来说,Laravel框架以其易用性、优雅的语法、丰富的功能和强大的扩展性受到了广大开发者的喜爱。它提供了

    PHP LARAVEL 模型的关联写入

       关联写入

    1. 新增有三种方式,比如给一个用户增加关联书籍;
    //先限定用户
    $user = User::find(19);
    //给这个用户关联的 book 新增一条记录
    //user_id 会自动写入 19,title 自定义
    $user->book()->save(new Book(['name' => '《哈利波特》']));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 需要设置批量赋值,我们取消掉,book 表没有时间字段,也要取消自动写入;
    //数据库模型开启 👉 protected $fillable = ['name'];
    //数据库模型开启 👉 public $timestamps = false;
    $user = User::find(1);
    $result = $user->book()->save(new Book(['name'=>'哈哈']));
    //or
    //取消批量赋值 👉 protected $guarded = [];
    //数据库模型开启 👉 public $timestamps = false;
    $user = User::find(1);
    $result = $user->book()->save(new Book(['name'=>'哈哈']));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. create 和 createMany 只需要插入数组即可完成关联新增;
    $user = User::find(1);
    $user->book()->create([
         'name' => '《哈利波特》'
     ]);
    $user->book()->createMany([
        ['name' => '《哈利波特》'],
        ['name' => '《指环王》']
    ]);
    PS:还有 findOrNew、firstOrNew、firstOrCreate 和 updateOrCreate 方法;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 有新增,自然有修改删除,直接使用 delete()和 update()方法即可;
    //关联删除,删除 user_id=19 的书
    $user = User::find(99);
    $user->book()->delete();
    //关联修改,修改 user_id=19 的书
    $user = User::find(99);
    $user->book()->update(['name' => '《修改书籍》']);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 使用 associate() 方法来修改掉书籍关联的用户,即修改 user_id;
    PS:修改关联的外键,即:user_id 修改,换用户
    $user = User::find(20);
    $book = Book::find(11);
    $book->user()->associate($user);
    $book->save();
    
    PS:如果想取消一本书的拥有者,比如将 user_id 设置为 null,字段要设置可以 null$book = Book::find(11);
    $book->user()->dissociate();
    $book->save();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 在搜索书籍的对应用户的时候,空 null 字段会导致用户出现 null 数据;
    2. 我们可以采用空对象默认模型的方式,去解决这个问题;
    //Book.php
    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id')
        ->withDefault([
            'id' => 0,
            'username' => '游客用户'
        ]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    PHP LARAVEL 多对多的关联写入

       关联写入

    1. 多对多的新增:比如,给用户增加一个角色权限,具体如下:
    //得到要添加权限的用户
    $user = User::find(99);
    //得到权限的 id,比如超级管理员
    $roleId = 1;
    //给辉夜设置成超级管理员
    $user->role()->attach($roleId);
    2. 如果你想给中间表附加 details 字段的数据,可以使用第二参数;
    $user->role()->attach($roleId, ['details' => '喀']);
    3. 如果想移出某个用户的角色权限,可以使用 detach()方法;
    //删除一个角色权限
    $user->role()->detach($roleId);
    PS:如果不指定中间表 id,那么就移出这个用户的所有权限角色;
    4. 也支持批量处理,直接用数组传递参数即可;
    //这里传递的是角色权限表的 ID
    $user->role()->attach([1,2,3]); //附加值 1 => ['detail' => 'xxx']
    //删除指定的 user_id
    $user->role()->detach([1,2,3]);
    5. 使用 sync()方法,可以新增角色权限,且可以判断已存在而不再新增;
    //同步关联,已存在不在新增
    return $user->role()->sync([1,2,3]); //附加值 1 => ['detail' => 'xxx']
    6. 使用 udpateExistingPivot()可更新指定 roleId 的额外字段;
    //更新中间表的额外字段
    $user->role()->updateExistingPivot($roleId, ['details'=>'喀']);
    PS:直接使用 update()是更新所有;
    PS:通过查看源码或 IDE 代码提示的方法,有更多的操作;可自行阅读扩展;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    最后

    以上是个人学习 THINKPHP 的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

  • 相关阅读:
    学习OpenCV(蝴蝶书/C++)相关——2.MacOS下使用LLDB调试cpp程序
    python环境移植,制作可以移植的python环境
    VMware虚拟机+Centos7 配置静态,动态IP
    使用docker运行应用程序
    升级iOS17后可以降级吗?iOS17退回iOS16方法教程分享
    vue项目中element-ui对话框el-dialog嵌套显示时多了一个遮罩层解决办法
    弹性蛋白酶中英文说明书
    用tkinter+selenium做一个CSDN热榜爬虫
    hystrix 熔断器
    C++—— pass by value and use std::move
  • 原文地址:https://blog.csdn.net/m0_61490399/article/details/131874235