Вопрос по php, symfony, doctrine-orm, doctrine – doctrine2: в двусторонних отношениях один-ко-многим, как спасти с обратной стороны?

5

У меня двунаправленные отношения «один ко многим» ниже.

После генерации грубых действий с задачей symfony2, когда я пытаюсь сохранить продукты, связанные с категорией, в новой / редактируемой форме категории, продукты не сохраняются ...

namespace Prueba\FrontendBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="category")
 */
class Category
{

    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="category")
     */
    protected $products;

    /**
     * @ORM\Column(name="name")
     */
    protected $name;

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

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

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

    public function setName($name)
    {
        $this->name = $name;
    }

    public function __toString()
    {
        return $this->name;
    }

    public function getProducts()
    {
        return $this->products;
    }

    public function setProducts($products)
    {
        die("fasdf"); //here is not entering
        $this->products[] = $products;
    } 

    public function addProduct($product)
    {
        die("rwerwe"); //here is not entering
        $this->products[] = $product;
    } 
}
namespace Prueba\FrontendBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */
    protected $category;

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


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

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

    public function setName($name)
    {
        $this->name =  $name;
    }

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

    public function setCategory($category)
    {
        $this->category = $category;
    }

    public function __toString()
    {
        return $this->name;
    }
}

Ваш Ответ

2   ответа
1

Еще одно короткое решение:

в вашей категории, добавьте эту строку в функцию addProduct

  public function addProduct($product)
    {
        $product->setCategory($this); // setting the cateogry of  product 
        $this->products[] = $product;
    }
9

В качестве двунаправленной связи вам необходимо обновить связь с обеих сторон.

Добавьте эту функцию в объект категории (вы можете назвать ее addChild, если хотите):

public function addProduct($product)
{
    $this->children->add($product);
}

А затем обновите обе ассоциации одновременно:

public function setProductCategory($product_category)
{
    $this->productCategory = $product_category;  
    $product_category->addProduct($this);
}

Совет: не используйте $ children / $ parent для описания сущностей. Назовите это как $ category / $ product, у вас возникнут проблемы, когда вы захотите добавить другого «родителя». отношения.

Error: User Rate Limit Exceeded ziiweb
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы