Laravel与存储库/服务设计模式的雄辩关系


Laravel Eloquent Relationships with Repository/Service Design Pattern

我目前正在开发一个使用存储库/服务层设计模式设置的 Web 应用程序,即我有服务层,在存储库中运行任何方法之前执行任何必要的业务逻辑。我的每个模型都有外墙,这些模型可以访问它们各自的服务层,这在大多数情况下都很好。然而,现在我正在尝试建立雄辩的关系,外墙似乎引起了巨大的头痛,因为我不确定我应该朝哪个方向走。

采用以下代码:

class Account extends Eloquent {
    // Our table name
    protected $table = "accounts";
    // Our primary key
    protected $primaryKey = "id";
    /**
     *  Role Relationship
     *
     *  Returns a list of roles associated with 
     *  this account
     */
    public function roles() {
        return $this->hasMany('Role');
    }
}

这不会按原样工作,因为它不是使用 Role 的实体类,而是使用角色外观。我已经找到了一种解决方法,方法是为实体设置名称略有不同的别名,例如 RoleEntity,以便

    public function roles() {
        return $this->hasMany('RoleEntity');
    }

会起作用,但这似乎不是最佳解决方案。

我的问题是,练习可以吗?或者更好的是,这应该发生吗?如果没有,我该如何修复它/我哪里出错了?

在同一命名空间中有两个同名的类。使用不同的命名空间,以便可以使用相同的类名。

我通常使用 ''Models 来定位我的模型类。

在每个模型文件的顶部:

namespace Models;

在控制器或应用的任何部分中:

'Models'Role::first();

请注意,更改模型上的命名空间需要您添加其他类的命名空间,即 Str、Eloquent、Url、重定向等。

use Eloquent;
use URL;

在您的模型中,您还必须在关系函数中传递命名空间,即:

public function roles() {
    return $this->hasMany(''Models'Role');
}