romverner/laravel-advanced-relationships

使用 awobaz/compoships 和 staudenmeir/eloquent-json-relations 实现多列和 JSON 关联,兼容 Laravel 8。原始库归功于 sheldonreiff。

v1.0.0 2020-01-12 02:45 UTC

This package is auto-updated.

Last update: 2024-09-08 00:24:43 UTC


README

使用 awobaz/composhipsstaudenmeir/eloquent-json-relations 在 Laravel Eloquent 中实现多列和 JSON 列关联

在最近的项目中,我遇到了需要在同一模型中同时使用多列和 JSON 列关联的需求。Laravel 本身不支持这两种功能。存在两个第三方库分别提供这些功能,但是它们有多个冲突的方法,所以不能在同一类中使用。此包结合了 awobaz/composhipsstaudenmeir/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/composhipsstaudenmeir/eloquent-json-relations 获取更多功能和其它信息。此包依赖于这些包,并仅实现使它们协同工作的必要集成。