allcaretravel / laravel-relatable
用于管理 Eloquent 模型相关内容的特性
Requires
- php: ^7.2.5|^8.0
- illuminate/database: ^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.18
- phpunit/phpunit: ^9.3.3
README
注意:此项目是从 spatie/laravel-relatable
分支出来的
用于管理 Eloquent 模型相关内容的特性
laravel-relatable
包提供了 HasRelatedContent
特性,允许您轻松地将模型与其他任何类型的模型关联起来。
// The `Post` class uses the `HasRelatedContent` trait $post = Post::find(1); $anotherPost = Post::find(2); $person = Person::find(1); $post->relate($anotherPost); $post->relate($person);
之后,您可以通过 related
访问器检索文章的相关内容。
$related = $post->related; // => Collection containing `$anotherPost` and `$person`
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
支持我们
我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从您的家乡寄给我们明信片,并注明您正在使用我们的哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上。
安装
您可以通过 composer 安装此包
composer require allcaretravel/laravel-relatable
如果您想指定自定义表名,则需要发布并编辑配置文件
php artisan vendor:publish --provider="Act\Relatable\RelatableServiceProvider" --tag="config"
发布和运行迁移是强制性的
php artisan vendor:publish --provider="Act\Relatable\RelatableServiceProvider" --tag="migrations" php artisan migrate
使用
运行迁移后,您可以通过将 HasRelatedContent
特性添加到您的模型中来开始使用此包。
use Illuminate\Database\Eloquent\Model; use Act\Relatable\HasRelatedContent; class Post extends Model { use HasRelatedContent; }
添加和删除相关内容
您可以使用 relate
函数将相关内容添加到模型中。 relate
需要模型或 ID 以及类型作为参数。
$post->relate($anotherPost); $post->relate($anotherPost->id, Post::class);
删除相关内容使用 unrelate
函数,它需要相同的参数。
$post->unrelate($anotherPost); $post->unrelate($anotherPost->id, Post::class);
同步相关内容
相关内容可以像 Laravel 的多对多关系的同步函数一样同步。 syncRelated
的第一个参数应该是 Eloquent 模型的集合或包含 ID 和类型的关联数组的数组。
// Relate all magic posts $post->syncRelated(Post::where('magic', true)->get()); // Relate post #1 $post->syncRelated([['id' => 1, 'type' => Post::class]]);
默认情况下,syncRelated
将断开所有其他相关模型。如果您只想添加相关内容,请将 detach
参数设置为 false。
// Relate all magic posts, without detaching other related content $post->syncRelated(Post::where('magic', true)->get());
检索相关内容
HasRelatetContent
特性提供对 related
的访问器。相关内容将在第一次调用此函数时加载并缓存到内存中。
$post->related; // : \Illuminate\Support\Collection
可以通过 loadRelated
方法手动重新加载相关内容。此方法将重新填充相关缓存并返回集合。
$post->loadRelated(); // : \Illuminate\Support\Collection
还提供了一个 hasRelated
辅助函数。
$post->hasRelated(); // : bool
更新日志
有关最近更改的更多信息,请参阅 更新日志。
测试
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 semsphy@gmail.com 联系我们,而不是使用问题跟踪器。
致谢
关于Spatie
Spatie 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。