dandelionmood/laravel-relatable

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

1.0.0 2016-03-08 09:43 UTC

This package is auto-updated.

Last update: 2024-08-28 10:58:24 UTC


README

注意:此包未在 Packagist 上注册且已废弃。它仅在 Spatie 的几个内部项目中使用。

管理 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 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)。请参阅 许可证文件 了解更多详细信息。