dandelionmood / laravel-relatable
管理 Eloquent 模型的相关内容的特性
Requires
- php: ^7.0
- illuminate/database: ^5.2
- illuminate/support: ^5.2
Requires (Dev)
- orchestra/testbench: ^3.2
- phpunit/phpunit: 5.*
README
注意:此包未在 Packagist 上注册且已废弃。它仅在 Spatie 的几个内部项目中使用。
管理 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 spatie/laravel-relatable
为了发布迁移和配置文件,您需要注册服务提供者
// config/app.php 'providers' => [ // ... Spatie\Relatable\RelatableServiceProvider::class, ];
如果您想指定自定义的表名,您需要发布并编辑配置文件
php artisan vendor:publish --provider="Spatie\Relatable\RelatableServiceProvider" --tag="config"
发布和运行迁移是强制性的
php artisan vendor:publish --provider="Spatie\Relatable\RelatableServiceProvider" --tag="migrations" php artisan migrate
使用方法
运行迁移后,您可以通过将 HasRelatedContent
特性添加到您的模型中来开始使用此包。
use Illuminate\Database\Eloquent\Model; use Spatie\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 的多对多关系中的 sync 函数一样同步。 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
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
composer test
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 freek@spatie.be 而不是使用问题跟踪器。
鸣谢
关于 Spatie
Spatie 是一家位于比利时的安特卫普网站设计公司。您可以在我们的网站上找到我们所有开源项目的概述 这里。
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多详细信息。