如果之前有人问我,我会事先道歉。
我已成功设置FOSUserBundle。
我正在尝试从文档中的该链接设置“http://symfony.com/doc/current/book/doctrine.html”产品示例。
我想要做的是设置它,以便特定用户添加产品FOSUser的用户ID,该用户与该产品相关联。
我在Acme文件夹中有两个包
Acme / UserBundle - > FOSUser设置
和
Acme / MainBundle - >我在哪里设置产品。
我已经查看了几次关系文档,我在Symfony2中对它们不太清楚。
我认为用户实体中的OneToMany关系基于Products表中的“user_id”,但我不是100%确定如何做到这一点。
如果我正朝着正确的方向前进,有没有人知道教程甚至基本想法?非常感谢,一旦我到达那里,我显然会公布成功的结果。
答案 0 :(得分:1)
您只需在用户和产品之间添加关系即可。所以你的产品实体应该是这样的:
<强>的src / Acme公司/ MainBundle /实体/ Product.php 强>
namespace Acme\MainBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* @ORM\Column(type="text")
*/
protected $description;
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User", inversedBy="products")
* @ORM\JoinColumn(name="user_id", nullable=false)
*/
protected $user;
}
和您的用户实体
<强>的src / Acme公司/ UserBundle /实体/ user.php的强>
namespace Acme\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Acme\MainBundle\Entity\Product;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User
{
/**-
* User properties...
*/
/**
* @ORM\OneToMany(targetEntity="Acme\MainBundle\Entity\Product", mappedBy="user", cascade={"remove"})
*/
protected $products;
/**
* Constructor
*/
public function __construct()
{
$this->products = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add product
*
* @param Product $product
* @return Branch
*/
public function addProduct(Product $product)
{
$this->products[] = $product;
return $this;
}
/**
* Remove product
*
* @param Product $products
*/
public function removeProduct(Product $product)
{
$this->products->removeElement($product);
}
/**
* Get products
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getProducts()
{
return $this->products;
}
}
所有内容都在doctrine documentation
中解释答案 1 :(得分:0)
以下在Symfony 2.3中对我来说非常有效。我从阅读文档和在Symfony2上发布第3集我得到了它我希望它可以帮助某人。
实体
use Doctrine\ORM\Mapping as ORM;
use Acme\UserBundle\Entity\User;
/**
* @ORM\Entity
* @ORM\Table(name="products")
*/
class Products
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* @ORM\Column(type="text")
*/
protected $description;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return Products
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set price
*
* @param float $price
* @return Products
*/
public function setPrice($price)
{
$this->price = $price;
return $this;
}
/**
* Get price
*
* @return float
*/
public function getPrice()
{
return $this->price;
}
/**
* Set description
*
* @param string $description
* @return Products
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User", cascade={"remove"})
* @ORM\JoinColumn(onDelete="CASCADE")
*/
private $owner;
public function getOwner()
{
return $this->owner;
}
public function setOwner(User $owner)
{
$this->owner = $owner;
}
}
并在控制器中
/**
* Creates a new Products entity.
*
*/
public function createAction(Request $request)
{
$entity = new Products();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
// Associate User Entity To Product
$user = $this->container->get('security.context')->getToken()->getUser();
$entity->setOwner($user);
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('products_show', array('id' => $entity->getId())));
}
return $this->render('AcmeMainBundle:Products:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}