romverner / laravel-advanced-relationships
使用 awobaz/compoships 和 staudenmeir/eloquent-json-relations 实现多列和 JSON 关联,兼容 Laravel 8。原始库归功于 sheldonreiff。
Requires
- php: ^7.2
- awobaz/compoships: ^1.1
- staudenmeir/eloquent-json-relations: ^1.2.3
Requires (Dev)
- jeroen-g/laravel-packager: ^2.4
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-08 00:24:43 UTC
README
使用 awobaz/compoships 和 staudenmeir/eloquent-json-relations 在 Laravel Eloquent 中实现多列和 JSON 列关联
在最近的项目中,我遇到了需要在同一模型中同时使用多列和 JSON 列关联的需求。Laravel 本身不支持这两种功能。存在两个第三方库分别提供这些功能,但是它们有多个冲突的方法,所以不能在同一类中使用。此包结合了 awobaz/compoships 和 staudenmeir/eloquent-json-relations,以便在同一 Laravel 模型中提供两者的完整功能。
注意
这是一个原始包 sheldonreiff/laravel-advanced-relationships 的分支版本,该包是为了与 Laravel 5 兼容而创建的。我在这里创建了 dev-master 分支以与 Laravel 8 兼容。
安装
If using Laravel 5-7, please use the original package originally created by sheldonreiff:
composer require sheldonreiff/laravel-advanced-relationships
If using Laravel 8, please use the updated package:
composer require romverner/laravel-advanced-relationships:dev-master
用法
将 HasAdvancedRelationships
特性添加到父模型和关联模型中。对于所有支持的关系,可以指定 JSON 列、多列或多 JSON 列作为本地键和外部键,如下面的示例所示。
namespace App;
use Illuminate\Database\Eloquent\Model;
class A extends Model
{
use \Reiff\AdvancedRelationships\HasAdvancedRelationships;
public function b()
{
return $this->hasMany('B', 'f1', 'details->l1');
}
public function c()
{
return $this->hasMany('C', ['f1', 'details->f2'], ['details->l1', 'l2']);
}
}
支持的关系
以下关系都提供了多列和 JSON 列的支持。
- hasOne
- hasMany
- belongsTo
更多信息
请参考 awobaz/compoships 和 staudenmeir/eloquent-json-relations 获取更多功能和其它信息。此包依赖于这些包,并仅实现使它们协同工作的必要集成。