Php Symfony 3-组织存储库类和功能

Php Symfony 3-组织存储库类和功能,php,symfony,Php,Symfony,在我的symfony3项目中,我有一些实体和存储库。不幸的是,在存储库文件中,我只能添加get或getAll函数。我想添加函数checkBlocked()来检查用户是否被阻止。我应该在哪里添加该函数?到存储库文件还是其他地方?存储库文件应该包含与返回的数据库数据有关的任何内容,无论是复杂的查询,还是您将使用很多的查询,都应该包含在存储库文件中 实体文件基本上是数据库数据的对象,也称为抽象。这样做的目的是,无论我们使用哪种类型的数据库,我们都有一种统一存储它的方法,这样它就独立于数据库,因此我将在

在我的symfony3项目中,我有一些实体和存储库。不幸的是,在存储库文件中,我只能添加get或getAll函数。我想添加函数checkBlocked()来检查用户是否被阻止。我应该在哪里添加该函数?到存储库文件还是其他地方?

存储库文件应该包含与返回的数据库数据有关的任何内容,无论是复杂的查询,还是您将使用很多的查询,都应该包含在存储库文件中

实体文件基本上是数据库数据的对象,也称为抽象。这样做的目的是,无论我们使用哪种类型的数据库,我们都有一种统一存储它的方法,这样它就独立于数据库,因此我将在其中放置一个完美的示例,如下所示

假设我们有一个实体,它有一个名字段和一个姓字段:

    /**
     * @return mixed
     */
    public function getFirstName()
    {
        return $this->firstName;
    }

    /**
     * @param mixed $firstName
     */
    public function setFirstName($firstName): void
    {
        $this->firstName = $firstName;
    }

    /**
     * @return mixed
     */
    public function getLastName()
    {
        return $this->lastName;
    }

    /**
     * @param mixed $lasttName
     */
    public function setLastName($lastName): void
    {
        $this->lastName = $lastName;
    }
但是,假设我们需要得到他们的全名很多,它可以是麻烦的类型

$user->getFirstName()$用户->getLastName()

那么为什么不为我们添加一个方法呢

public function getFullName()
{
    return $this->first_name . ' ' . $this->last_name;
}
换句话说,你所说的checkBlocked方法听起来像是一种禁令系统。我猜您有一个名为blocked的数据库列,它是一个很小的int。如果事实上是这样,我会说它属于实体

public function getIsUserBlocked()
{
    // return your column here
}

确保拥有存储库的实体包含行
*@ORM\Entity(repositoryClass=“App\Entity\HouseholdRepository”)
,用您的结构替换
App
。那么,您的存储库是实现其他功能的最佳场所。好的,谢谢。因此,我的checkBlocked()函数的最佳位置将是实体类。为什么不将其作为私有方法添加到服务中呢?如果checkBlocked()需要DB IO,我假设服务已经注入了您的存储库,所以在该方法中只需调用存储库执行DB magic并返回布尔值。repo可能只有与DB相关的方法checkBlocked()函数实际上在检查什么?是否基于用户表中的值,例如
user.blocked
?可能是另一个表中的一行,例如
阻塞的\u用户
等等?还是在检查更复杂的东西?