jwohlfert23 / laravel-sync-relations
用于从请求数据同步嵌套关系的包
5.0.0
2024-03-19 11:38 UTC
Requires
- php: >=8.2
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
- illuminate/validation: ^10.0|^11.0
- nesbot/carbon: ~2
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
README
Laravel Sync Relations
将此代码添加到您的模型中
use Jwohlfert23/LaravelSyncRelations/SyncableTrait; ... class Post extends Model { use SyncableTrait; }
您可以在控制器中使用它,如下所示
public function update($id) { $post = Post::find($id); $post->saveAndSync(request()->input(), ['tags']); }
假设以下情况
- Post模型与tags有一个"hasMany"关系。
- 请求数据看起来像这样
{ "title": "My Post Title", "tags": [{ "id": 1, "name": "My First Tag" }, { "name": "My Second Tag" }] }
运行saveAndSync
后,它将遍历请求中提供的2个tags。因为第一个已经存在,所以它会更新它并将名称设置为"My First Tag"。第二个不存在,所以它会使用"My Second Tag"创建它。在这个控制器处理完这个请求之后,您可以运行以下代码
Post::find($id)->tags->pluck('name')
并得到以下结果
["My First Tag", "My Second Tag"]
此包也支持"belongsToMany"和"belongsTo"关系类型。然而,对于这些,它不会更新/创建嵌套对象。它只会将现有模型与父模型关联(换句话说,对于这些关系,您必须为每个子提供主键)。
此外,您还可以运行saveAndSync(request()->input(), ['comments.author'])
来进行嵌套同步。