allcaretravel/laravel-relatable

用于管理 Eloquent 模型相关内容的特性

2.0.3 2021-06-17 10:41 UTC

This package is auto-updated.

Last update: 2024-09-17 17:40:44 UTC


README

注意:此项目是从 spatie/laravel-relatable 分支出来的

用于管理 Eloquent 模型相关内容的特性

Latest Version on Packagist Software License Build Status SensioLabsInsight Quality Score Total Downloads

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)。请参阅许可证文件以获取更多信息。