macsidigital/laravel-eloquent-extended

此包的最新版本(3.0.0)没有可用的许可信息。

Eloquent 扩展是一个库,用于向 Laravel Eloquent 添加一些附加功能

3.0.0 2024-06-13 10:40 UTC

This package is auto-updated.

Last update: 2024-09-21 16:00:30 UTC


README

扩展模型属性、多语言属性和别名

Header Image

tests badge version badge downloads badge

扩展 Eloquent 模型,主要用于 JSON 和多语言内容

支持我们

我们在创建开源包方面投入了大量资金,如果您从使用这些包的产品中获利,我们将非常感谢赞助

安装

您可以通过 composer 安装此包

composer require macsidigital/laravel-eloquent-extended

用法

要使用扩展,我们只需要添加 trait 并添加一个受保护的 extendedAttributes 变量,如下所示

use Extended\Traits\IsExtended;
use Illuminate\Database\Eloquent\Model;

class TestExtendedModel extends Model
{
	use IsExtended;

	protected $extendedAttributes = [
		'test_field',
	];

}

一旦设置,它将像普通字段一样工作

$test = new model;
$test->test_field = 'something';

echo $test->test_field;

内容

使用内容与上述类似,区别在于我们可以设置语言

use Extended\Traits\IsExtended;
use Extended\Traits\HasContent;
use Illuminate\Database\Eloquent\Model;

class TestExtendedModel extends Model
{
	use IsExtended, HasContent;

	protected $contentAttributes = [
		'test_content_field',
	];

}

一旦设置,它将像普通字段一样工作

$test = new model;
$test->test_content_field = 'something';

echo $test->test_content_field;

我们可以设置和获取不同的语言,如下所示

$test = new model;
$test->test_content_field = 'something';

$test->setContentLanguage('de');

$test->test_content_field = 'something DE';

$test->setContentLanguage('en');

echo $test->test_content_field; // 'something'

$test->setContentLanguage('de');

echo $test->test_content_field; // 'something DE'

别名

我们可以通过添加 HasContent 和 HasSlug trait 并设置别名字段来使用多语言别名

use Extended\Traits\HasSlug;
use Extended\Traits\IsExtended;
use Extended\Traits\HasContent;
use Illuminate\Database\Eloquent\Model;

class TestExtendedModel extends Model
{
	use IsExtended, HasContent, HasSlug;

	protected $contentAttributes = [
		'uri',
	];

	protected $findSlugField = 'extended->uri';
	protected $slugField = 'uri';

}

然后您可以这样添加 URI

$test = new model;
$test->uri = 'something';

echo $test->uri; //esomething

为确保没有重复的别名,您可以使用 createSlug 方法

$test = new model;
$test->createSlug('Test Something');

echo $test->uri; //test-something

$test = new model;
$test->createSlug('Test Something');

echo $test->uri; //test-something-h58s

我们可以设置和获取不同的语言,如下所示

$test = new model;
$test->uri = 'something';

$test->setLanguage('de');

$test->uri = 'something-de';

$test->setMetaLanguage('en');

echo $test->uri; // 'something'

$test->setMetaLanguage('de');

echo $test->uri; // 'something-de'

然后您可以使用 withSlug 作用域查询方法通过别名检索

$test = new model;
$test->createSlug('something');

$model = model::withSlug('something')->first()

echo $model->uri; // 'something'

还有一个反向函数,可以获取所有不带别名的模型

$test = new model;
$test->createSlug('something');

$test = new model;
$test->createSlug('something-1234');

$model = model::withoutSlug('something')->first()

echo $model->uri; // 'something-1234'

我们还可以在多语言作用域之外使用别名,只需将其设置为普通数据库字段即可。

use Extended\Traits\HasSlug;
use Extended\Traits\IsExtended;
use Extended\Traits\HasContent;
use Illuminate\Database\Eloquent\Model;

class TestExtendedModel extends Model
{
	use HasSlug;

	protected $findSlugField = 'uri';
	protected $slugField = 'uri';

}

然后所有功能都将像之前一样工作

路由模型绑定

您可以在路由中使用 {item:slug} 来自动检索由其别名指定的项目。请记住在控制器/路由操作中为模型添加类型提示。

测试

我们有一个测试套件测试我们的实现,要使用它只需运行 phpunit。

composer test

变更日志

请参阅变更日志了解最近有哪些更改。

贡献

请参阅贡献以获取详细信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件info@macsi.co.uk联系,而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可文件