laravel雄辩模型的模块模型关系特征

laravel雄辩模型的模块模型关系特征,laravel,architecture,eloquent,package,entity-relationship,Laravel,Architecture,Eloquent,Package,Entity Relationship,我将我的代码分成几个小的包,利用这些包为我将要开发的其他应用程序重用的好处。() 示例包列表: UserPackage(可以组合为Access或AuthPackage,仅举一个例子) 角色包(可以组合为Access或AuthPackage,仅举一个例子) PermissionPackage(可以组合为Access或AuthPackage,仅举一个例子) ContactPackage 地址包(可变形关系) 如果一个应用程序需要一些软件包,你只需要编写程序就可以了。所以并不是所有的都会被使用。

我将我的代码分成几个小的包,利用这些包为我将要开发的其他应用程序重用的好处。()

示例包列表:

  • UserPackage(可以组合为Access或AuthPackage,仅举一个例子)
  • 角色包(可以组合为Access或AuthPackage,仅举一个例子)
  • PermissionPackage(可以组合为Access或AuthPackage,仅举一个例子)
  • ContactPackage
  • 地址包(可变形关系)
如果一个应用程序需要一些软件包,你只需要编写程序就可以了。所以并不是所有的都会被使用。在这种情况下,我被困在如何设计这个

因为,我正在寻找一种聪明的方法,将模型关系分离成小块文件,尽可能保持模型的干净

我提出了两种方法:关系特征(与给定模型的所有相关关系)和关系特征(在需要关系的模型上实施)

但我无法确定哪一个更适合保持包的可伸缩性和模块化。特别是,如果我不知道是否会安装特定的软件包

1。关系特质

范例

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Permissions extends Model
{

    /*
     * Every Model has a Relationships trait
     * containing all possible relationships
     */
    use \App\Traits\PermissionRelationships;

    //
}
具有所有关系,即使关系的模型不存在

2。hassrelationtrait
再举一个模型示例:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    /*
     * Implements the required relationships
     */
    use \App\Traits\Relationships\HasRoles; // or roleable
    use \App\Traits\Relationships\HasPermissions; // or permissionable

    //
}
权限特征:
namespace App\Traits\Relationships;

trait HasPermissions
{
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
}
在这里,我可以在一个模型上实现这个特性,我决定使用这个关系,即使它不适合这个模型。(我假设会有不合理的组合)

也许有第三种方法我没有想到,但当我研究这两种方法时,我无法找到一个对我的包体系结构有益的好解决方案。在这种情况下该怎么办

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    /*
     * Implements the required relationships
     */
    use \App\Traits\Relationships\HasRoles; // or roleable
    use \App\Traits\Relationships\HasPermissions; // or permissionable

    //
}
namespace App\Traits\Relationships;

trait HasRoles
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
namespace App\Traits\Relationships;

trait HasPermissions
{
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
}