Laravel Eloquent 与 Repository/Service 设计模式的关系
Laravel Eloquent Relationships with Repository/Service Design Pattern
我目前正在开发一个使用 Repository/Service 层设计模式设置的网络应用程序,即我有一个服务层,它在 运行 任何方法之前执行任何必要的业务逻辑存储库。我的每个模型都有外观,可以访问它们各自的服务层,这在大多数情况下都很好。然而,现在我正在尝试建立 Eloquent 关系,因为我不确定我应该去哪个方向,所以立面似乎引起了巨大的头痛。
取以下代码:
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 的实体 class,而是使用 Role Facade。我已经想出了一个解决方法,通过为实体设置一个名称略有不同的别名,例如 RoleEntity 以便
public function roles() {
return $this->hasMany('RoleEntity');
}
会起作用,但这似乎不是最佳解决方案。
我的问题是,练习可以吗?或者更好的是,这应该发生吗?如果没有,我该如何解决 it/where 我做错了吗?
您有两个 class 在同一个命名空间中同名。使用不同的命名空间,这样您就可以使用相同的 class 个名称。
我通常使用 \Models 来定位我的模型 classes.
在每个模型文件的顶部:
namespace Models;
在您的控制器或应用的任何部分:
\Models\Role::first();
请注意,更改模型上的命名空间将需要您添加其他 class 的命名空间,即 Str、Eloquent、Url、Redirect 等
use Eloquent;
use URL;
在您的模型中,您还必须在关系函数中传递命名空间,即:
public function roles() {
return $this->hasMany('\Models\Role');
}
我目前正在开发一个使用 Repository/Service 层设计模式设置的网络应用程序,即我有一个服务层,它在 运行 任何方法之前执行任何必要的业务逻辑存储库。我的每个模型都有外观,可以访问它们各自的服务层,这在大多数情况下都很好。然而,现在我正在尝试建立 Eloquent 关系,因为我不确定我应该去哪个方向,所以立面似乎引起了巨大的头痛。
取以下代码:
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 的实体 class,而是使用 Role Facade。我已经想出了一个解决方法,通过为实体设置一个名称略有不同的别名,例如 RoleEntity 以便
public function roles() {
return $this->hasMany('RoleEntity');
}
会起作用,但这似乎不是最佳解决方案。
我的问题是,练习可以吗?或者更好的是,这应该发生吗?如果没有,我该如何解决 it/where 我做错了吗?
您有两个 class 在同一个命名空间中同名。使用不同的命名空间,这样您就可以使用相同的 class 个名称。
我通常使用 \Models 来定位我的模型 classes.
在每个模型文件的顶部:
namespace Models;
在您的控制器或应用的任何部分:
\Models\Role::first();
请注意,更改模型上的命名空间将需要您添加其他 class 的命名空间,即 Str、Eloquent、Url、Redirect 等
use Eloquent;
use URL;
在您的模型中,您还必须在关系函数中传递命名空间,即:
public function roles() {
return $this->hasMany('\Models\Role');
}