macsidigital / laravel-eloquent-extended
此包的最新版本(3.0.0)没有可用的许可信息。
Eloquent 扩展是一个库,用于向 Laravel Eloquent 添加一些附加功能
3.0.0
2024-06-13 10:40 UTC
Requires
- php: ^8.1|^8.2
- laravel/framework: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0|^11.0
README
扩展模型属性、多语言属性和别名
扩展 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)。有关更多信息,请参阅许可文件。