offline-agency/laravel-mongo-auto-sync

此包为Laravel项目中的MongoDB关系提供了更好的支持。

3.1.1 2024-09-27 15:19 UTC

README

Latest Stable Version Total Downloads Build Status MIT Licensed Quality Score StyleCI codecov

此包为MongoDBLaravel项目中提供了更好的关系支持。在低级别上,所有CRUD操作都由jenssegers/laravel-mongodb处理。

安装

composer require offline-agency/laravel-mongo-auto-sync

先决条件

确保您已安装MongoDB PHP驱动。您可以在https://php.ac.cn/manual/en/mongodb.installation.php找到安装说明。

包版本兼容性

PHP版本兼容性

  • 版本1:PHP 7.1, 7.2, 7.3
  • 版本2:PHP 7.4
  • 版本3:PHP 7.4-8.1

功能

  • 在CRUD操作后同步具有关系的集合之间的更改
    • EmbedsOne & EmbedsMany

无此包的示例

//create a new Article with title "Game of Thrones" with Category "TV Series"
//assign data to $article       
$article->save();
/*
Article::class {
  'title' => 'Game of Thrones',
  'category' => Category::class {
      'name' => 'TV Series'
   }
}
*/

//Retrieve 'TV Series' category
$category = Category::where('name', 'TV Series')->first();
/*
  Category::class {
      'name' => 'Game of Thrones',
      'articles' => null
  }
*/ 

子文档文章未使用新文章更新。因此,您需要编写一些额外的代码才能在类别页面上看到新文章。同步的数量取决于关系的数量以及每个嵌入式Many关系中的条目数量。

总更新量 = ∑ (所有EmbedsMany关系中的条目) + ∑ (EmbedsOne关系)

正如您所看到的,额外的代码行可以迅速增加,您将编写许多冗余的代码。

使用我们的包的示例

//create a new Article with title "Game of Thrones" with Category "TV Series"
$article->storeWithSync($request);
/*
Article::class {
  'title' => 'Game of Thrones',
  'category' => Category::class {
      'name' => 'TV Series'
  }
}
 */
//Retrieve 'TV Series' category
$category = Category::where('name', 'TV Series')->first();   
/*
Category::class {
  'name' => 'Game of Thrones',
  'articles' => Article::class {
      'title' => 'Game of Thrones'
  }
}
*/ 

子文档文章已使用新文章更新,无需额外代码 🎉

您可以在类别页面上看到新文章,因为包通过读取模型设置为您同步了信息。

这些示例可以应用于数据库上的所有写入操作。

  • 参考子文档 [待办事项]
  • 将子文档作为模型处理,以便在写入操作期间利用Laravel ORM支持(无同步功能)[待测试]
  • 将引用的子文档作为模型处理,以便在写入操作期间利用Laravel ORM支持(无同步功能)[待办事项]
  • 高级类型支持

用例

  • 博客:在此查看演示
  • 电子商务
  • 移动应用程序或生成静态站点的API系统
  • 任何需要快速读取操作和(慢速)写入操作,且可以后台运行的项目

文档

您可以在此处找到文档

测试

在您项目的路由中运行此命令

docker-compose up

现在运行测试

composer test

路线图 🚀

  • 将目标同步重构为观察者模式,以便所有这些操作都可以在后台使用Laravel队列系统运行。这还将加速涉及写入操作的主要集合中的所有操作。
  • 命令分析数据库:此命令将分析数据库以查找某些关系错误。例如,一个与不存在于类别子文档中的类别关联的文章。
  • 重构save()方法,以便在不同步的情况下处理关系上的CRUD操作。
  • 支持引用关系
  • 支持所有字段类型。
  • 在销毁时,不要在其它集合中删除子文档。
  • 增加更多测试。
  • 嵌套关系。
  • 基准测试 MongoDB 与 Mysql(读写操作)。
  • 修复拼写错误。

贡献

有关详细信息,请参阅 贡献指南

安全性

如果您发现任何与安全相关的问题,请通过电子邮件发送至 support@offlineagency.com,而不是使用问题跟踪器。

鸣谢

关于我们

Offline Agency 是一家位于意大利帕多瓦的网页设计公司。您可以在我们的网站上找到我们项目的概述 在这里

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件