创建一个实体

时间:2014-01-15 16:18:44

标签: database list symfony entity

我使用Symfony2创建了一个Web应用程序,注册用户可以通过表单上传文件。 通过该文件,用户还可以保存有关该文件的信息,该信息表示与其相关的“任务”。

现在我将“任务信息”设置为“用户对象”;因此,当用户存储文件时,控制器检索有关任务的信息并将其与文件相关联。

用户实体是:

class UserOperator extends User
{

    protected $id;

    protected $name;

    private $mission;

带有注释,设置器和getter。

我存储文件的createAction是:

   public function createAction(Request $request)
   {                 
             $product = new Product();
  // ...  
             $product->setMission($this->getUser()->getMission());

             $form = $this->createFormBuilder($product)
                 ->add('name', 'text')
  // ...                       
                 ->add('save', 'submit')
  // ... 
                 ->getForm(); 

问题在于,如果我想更改名称或删除或修改任务,我必须更改与该任务相关的所有用户。我更喜欢创建一个“任务实体”,其中存储所有并且仅存储参与该任务的用户;当用户存储文件时,控制器向数据库查询可用的任务,并让用户仅选择与他相关的任务,并将文件与所选任务一起存储。

有可能吗?我该怎么办?

回顾一下,我的“使命实体”应该只能理解

$id
$name
$description (a textarea)
$userlist

现在我有一个名为user的实体和一个名为$ product的实体。进入实体$ user存储一个称为“任务”的问题:当用户上传具有特定表单的文件时,控制器还保存与用户相关联的任务。现在我没有“任务实体”,我不知道怎么做,如何将许多用户与任务实体联系起来。

我希望很清楚。

提前谢谢

2 个答案:

答案 0 :(得分:2)

好的,我会告诉你。我想我知道你想做什么。

首先,让我们制作任务实体:

namespace YOURNAMESPACE;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

/**
 * @ORM\Entity
 */
class Mission implements MissionInterface {
    /** 
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @var integer
     */
    protected $id;
    /** 
     * @ORM\Column(type="string", length=60)
     * @var String
     */
    protected $name;
    /**
     * @ORM\ManyToMany(targetEntity="YOURNAMESPACE\User", inversedBy="users")
     */
    protected $users;

    public function __construct(){
        $this -> users = new ArrayCollection();
    }

    public function setUsers(Collection $users){
        $this -> users = $users;
        return $this;
    }

    public function addUser(UserInterface $user){
        $this -> users -> add($user);
        return $this;
    }

    public function getUsers(){
        return $this -> users;
    }

// setter + getter
}

namespace YOURNAMESPACE;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;

/**
 * @ORM\Entity
 */
class User implements UserInterface {
    /** 
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @var integer
     */
    protected $id;
    /** 
     * @ORM\Column(type="string", length=60)
     * @var String
     */
    protected $name;
    /**
     * @ORM\ManyToMany(targetEntity="YOURNAMESPACE\Mission", mappedBy="users")
     */
    protected $missions;

    public function __construct(){
        $this -> missions = new ArrayCollection();
    }

    public function setMissions(Collection $missions){
        $this -> missions = $missions;
        return $this;
    }

    public function addMission(MissionInterface $mission){
        $this -> missions -> add($mission);
        return $this;
    }

    public function getMissions(){
        return $this -> missions;
    }

// setter + getter
}

注意:返回$ this;没有必要,但可以用来结合像$ this这样的调用 - > set1() - > SET2()。

编辑:你想要接口的代码。我认为这是基本的东西,但我讨厌未完成的解决方案,所以这里是接口:

namespace YOURNAMESPACE;

use SOMENAMESPACE\UserInterface;
use Doctrine\Common\Collections\Collection;

interface MissionInterface {
    /**
     * make some documentation please
     */
    public function getUsers();
    /**
     * make some documentation please
     */
    public function addUser(UserInterface $user);
    /**
     * make some documentation please
     */
    public function setUsers(Collection $users);
    // + other functions
}

您还应该创建自己的UserInterface,扩展Symfony的UserInterface并将新方法添加到它。

现在您的用户与任务相关联。每个用户可以拥有多个任务,每个任务可以拥有多个用户。

答案 1 :(得分:0)

我真的不明白你的问题。

  • 你有一个名为file
  • 的实体
  • 你有一个名为mission的实体
  • 您有一个名为user

  • 的实体
  • 每个文件只有一个任务。这种关联是必要的。

  • 每个任务都有多个用户

  • 与任务相关联的每个用户都可以编辑,更新,删除此任务

现在您想要更改任务的某些属性,例如名称。通常它不会有任何问题。 那么为什么你必须“改变与该任务相关的所有用户”?这是您的代码的要求还是后果?