我试图在产品和用户之间建立关系。一个用户拥有许多产品和许多产品=> 1位用户问题是我将表单添加到表“products”列user_id = NULL。
以下是我在产品实体中的关系:
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="products")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
用户实体:
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Product", mappedBy="user")
*/
private $products;
为什么列user_id始终为null?以下是用于保留产品的代码。
/**
* @Route("/products/add", name="create_products")
* @Security("has_role('ROLE_USER') or has_role('ROLE_EDITOR') or has_role('ROLE_ADMIN')")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function createProductAction(Request $request)
{
$product = new Product();
$form = $this->createForm(ProductType::class, $product);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
/** @var UploadedFile $file */
$file = $product->getImageForm();
$filename = md5($product->getName());
$file->move(
$this->get('kernel')->getRootDir() . '/../web/images/products/',
$filename
);
$product->setImage($filename);
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush();
$this->redirectToRoute('products');
return $this->redirectToRoute('products');
}
return $this->render('products/create.product.html.twig', array(
'productForm' => $form->createView()
));
}
答案 0 :(得分:1)
您尚未在Product对象中使用setter在控制器中设置用户。这就是问题所在。
你需要像这样使用setter:
$product->setImage($filename);
$product->setUser( $user );
$em = $this->getDoctrine()->getManager();
$em->persist($product);
以上假设您有一个名为setUser
的二传手。您还需要创建用户或确定用户。
答案 1 :(得分:1)
您在没有用户的情况下坚持产品。你应该这样做:
$product = new Product();
$product->setImage($filename);
$em = $this->getDoctrine()->getManager();
// here you associate the user
$user = $em->find('\AppBundle\Entity\User', 3); // user with id 3
$product->setUser($user);
$em->persist($product);
$em->flush();