Соединение таблиц с сущностью (Symfony) - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в Symfony и у меня проблемы с настройкой моих сущностей.Я хочу иметь возможность доступа к именам тегов из моей сущности Acasset.

Вот соответствующие сущности:

class Actag
{
    /**
     * @var string
     *
     * @ORM\Column(name="tag_name", type="string", length=200, nullable=true)
     */
    private $tagName;  

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



/**
 * Acassettag
 *
 * @ORM\Table(name="acAssetTag", indexes={@ORM\Index(name="IDX_7C4A2A745DA1941", columns={"asset_id"}), @ORM\Index(name="IDX_7C4A2A74BAD26311", columns={"tag_id"})})
 * @ORM\Entity
 */
class Acassettag
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var \AdminBundle\Entity\Acasset
     *
     * @ORM\ManyToOne(targetEntity="AdminBundle\Entity\Acasset", inversedBy="asset", cascade="PERSIST")
     * @ORM\JoinColumns({
     * @ORM\JoinColumn(name="asset_id", referencedColumnName="asset_id")
     * })
     */
    private $asset;

    /**
     * @var \AdminBundle\Entity\Actag
     *
     * @ORM\ManyToOne(targetEntity="AdminBundle\Entity\Actag")
     * @ORM\JoinColumns({
     * @ORM\JoinColumn(name="tag_id", referencedColumnName="tag_id")
     * })
     */
    private $tag;



/**
 * Acasset
 *
 * @ORM\Table(name="acAsset", indexes={@ORM\Index(name="IDX_3B81679E68BA92E1", columns={"asset_type"}), @ORM\Index(name="IDX_3B81679E12469DE2", columns={"category_id"})})
 * @ORM\Entity(repositoryClass="AdminBundle\Repository\AcAssetRepository")
 */
class Acasset
{      
    /**
     * @var string
     *
     * @ORM\Column(name="asset_name", type="string", length=100, nullable=false)
     */
    private $assetName;

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

    /**
     * @var \AdminBundle\Entity\Acassettype
     *
     * @ORM\OneToOne(targetEntity="AdminBundle\Entity\Acassettype", mappedBy="asset", fetch="EAGER", cascade={"persist"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="asset_type_id", referencedColumnName="asset_type_id")
     * })
     */
    private $assetType;   


    /**
     * @var \AdminBundle\Entity\Actag
     *
     * @ORM\ManyToOne(targetEntity="AdminBundle\Entity\Actag")
     * @ORM\JoinColumns({
     * @ORM\JoinColumn(name="tag_id", referencedColumnName="tag_id")
     * })
     */
    private $assetTags;

    /**
     * Set tag
     *
     * @param \AdminBundle\Entity\Actag $tag
     *
     * @return Acassettag
     */

    public function setAssetTags(\AdminBundle\Entity\Actag $tag = null)
    {
        $this->tag = $tag;

        return $this;
    }

    /**
     * Get tag
     *
     * @return \AdminBundle\Entity\Actag
     */
    public function getAssetTags()
    {
        return $this->tag;
    }

Итак, в моей сущности Acasset я создал $ assetTags, но получаюошибка: Неверное имя столбца 'tag_id'.

Но $ tag в сущности Acasettag работает, что настраивается аналогично.Что я пропускаю, все еще немного борюсь с этой частью Symfony.

Я не включил в этот пост все геттеры и сеттеры, только тот, который я создал для этого.

1 Ответ

0 голосов
/ 19 декабря 2018

Почему ваша шляпа Actag -Entity также является полем tagId?Вам не нужен определенный Id-столбец на стороне владельца.Вы должны определить OneToMany.

Многие Acassettag принадлежат одному Actag (из-за ManyToOne-Definition в Acassettag

Таким образом, каждому Acassettag потребуется полеactag_id с идентификатором владельца Actag, который будет автоматически сгенерирован вашим ManyToOne -определением

Когда вы создаете новый Acassettag объект и хотите «связать» его с существующим Actag вам нужно Acassettag

public setActag(Actag $actag)
{
    $this->tag = $actag;

    return $this;
}
...