簡體   English   中英

如何用symfony中附加的用戶創建對象

[英]how to create an object with a user attached in symfony

我正在嘗試創建當前經過身份驗證的用戶創建的產品。

用戶與產品實體有關系,我需要為用戶提供一種與其相關聯的用戶創建產品的方式。

我正在學習本教程 ,但沒有涉及如何與當前用戶一起存儲產品

這就是我到目前為止

ProductController.php

  public function create(Request $request)
    {

      $category = new Category();
      $category->setName($request->get('category'));

      $user = new User();
      // how would i get the current user and set it to a product.
      $entityManager = $this->getDoctrine()->getManager();

      $product = new Product();
      $product->setName($request->get('title'));
      $product->setPrice($request->get('price'));
      $product->setDescription($request->get('description'));

      $product->setCategory($category);

      $entityManager->persist($category);
      $entityManager->persist($product);
      $entityManager->flush();


      return $this->redirectToRoute('products');

    }

我應該使用這種方法還是嘗試其他方法?

Entity \\ User.php

public function addProduct(Product $product): self
{
    if (!$this->products->contains($product)) {
        $this->products[] = $product;
        $product->setUser($this);
    }

    return $this;
}

Entity \\ Product.php

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @ORM\Column(type="integer")
     */
    private $price;

    /**
     * @ORM\Column(type="text")
     */
    private $description;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="products")
     * @ORM\JoinColumn(nullable=false)
     */
    private $category;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="products")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getPrice(): ?int
    {
        return $this->price;
    }

    public function setPrice(int $price): self
    {
        $this->price = $price;

        return $this;
    }

    public function getDescription(): ?string
    {
        return $this->description;
    }

    public function setDescription(string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getCategory(): ?Category
    {
        return $this->category;
    }

    public function setCategory(?Category $category): self
    {
        $this->category = $category;

        return $this;
    }

    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(?User $user): self
    {
        $this->user = $user;

        return $this;
    }
}

如我所見,您的關系通過addProduct()方法工作,但是在您的控制器中,您不會在任何地方調用addProduct()

嘗試跟隨...

$entityManager->persist($user) // you forgot to persist a new User
$entityManager->persist($category);
$entityManager->persist($product);
$user->addProduct(product)
$entityManager->flush(); // now try to flush...

題外話和一些建設性的批評

僅通過查看您的控制器,我就假定您正在使用Symfony,尤其是在學習原理方面。 如果是這樣,請考慮以下。 如果沒有,那就忽略它;)

  • Product->user重命名為Product->createdBy此命名約定使其更加明顯。
  • 在這種情況下,最好從雙向關系(當前狀態)切換為單向關系(谷歌,但簡而言之->只需丟棄inversedBymappedBy部分在您的產品<->用戶關系中)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM