gpt4 book ai didi

php - Doctrine ORM关联的默认值

转载 作者:行者123 更新时间:2023-12-02 17:46:37 26 4
gpt4 key购买 nike

我有实体(如下所示)。我想在创建时设置一些默认值。正如您在 __construct 中看到的,很容易设置 $name(字符串),但是如何设置 $group? (例如,我知道数据库中有一个 id=122 的组)

/**
* @ORM\Entity
*/
class Person {
private $id;

/** @ORM\Column(type="string") */
private $name;

/**
* @ORM\ManyToOne(targetEntity="Group", inversedBy="persons")
* @ORM\JoinColumn(referencedColumnName="id")
*/
private $group;

public function setGroup(Group $group)
{
$this->group = $group;
$group->addPerson($this);
}

// ... setters/getters

//construct default Person
public function __construct()
{
$this->setName("Mike");
$this->setGroup($EXISTING_GROUP_FROM_MY_DB); // <<--------------
}
}

最佳答案

我同意 moonwave99 的观点,这是糟糕的设计。在这里,您正试图从一个不了解容器的地方(即它不知道也不应该知道 Doctrine)访问数据库(通过 Doctrine 服务)。

我最近遇到了类似的问题……实际上是完全相同的问题。但我不希望这个逻辑在 Controller 内部。所以我写了一个服务来处理用户创建。我让该服务访问它唯一需要的其他服务:Doctrine。

这是一个示例,其中创建了一个具有所有可用角色的用户:

namespace MyBundle\Entity;

class UserFactory
{
private $doctrine;

public function __construct($doctrine)
{
$this->doctrine = $doctrine;
}

public function generateNewUser($email, $password)
{
$user = new User();

// Since you have access to the Doctrine service, you can use $this->doctrine
// to do anything you would normally do in your controller with $this->getDoctrine()
$roles = $this->doctrine->getEntityManager()->getRepository("MyBundle:Role")->findAll();

foreach ($roles as $role)
{
$user->addRole($role);
}

return $user;
}
}

现在在 config.ymlservices.yml 中注册该服务,记得将 Doctrine 服务传递给它:

services:
mybundle.factory.user:
class: MyBundle\Entity\UserFactory
arguments: ['@doctrine']

就是这样...现在,在您的 Controller 中,您可以通过以下操作创建一个新用户:

public function MyController()
{
$user = $this->get("mybundle.factory.user")->generateNewUser("someone@email.com", "password123");
}

关于php - Doctrine ORM关联的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com