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

@作者 : SYFStrive

 

@博客首页 : HomePage

THINK PHP

个人社区(欢迎大佬们加入)社区链接

觉得文章不错可以点点关注专栏连接


请添加图片描述
相关专栏

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

目录

  • PHP LARAVEL 简介
  • PHP LARAVEL 模型的关联写入
  •    关联写入
  • PHP LARAVEL 多对多的关联写入
  •    关联写入
  • 最后


                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

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

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. 需要设置批量赋值,我们取消掉,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. create 和 createMany 只需要插入数组即可完成关联新增;
$user = User::find(1);
$user->book()->create([
     'name' => '《哈利波特》'
 ]);
$user->book()->createMany([
    ['name' => '《哈利波特》'],
    ['name' => '《指环王》']
]);
PS:还有 findOrNew、firstOrNew、firstOrCreate 和 updateOrCreate 方法;
  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. 使用 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. 在搜索书籍的对应用户的时候,空 null 字段会导致用户出现 null 数据;
  2. 我们可以采用空对象默认模型的方式,去解决这个问题;
//Book.php
public function user()
{
    return $this->belongsTo(User::class, 'user_id', 'id')
    ->withDefault([
        'id' => 0,
        'username' => '游客用户'
    ]);
}

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 代码提示的方法,有更多的操作;可自行阅读扩展;

最后

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

你可能感兴趣的:(LARAVEL,laravel,php)