表与实体联接(Symfony)

时间:2018-12-18 14:44:38

标签: php symfony doctrine

我是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'。

但Acasettag实体中的$ tag起作用,其设置方法相同。我缺少什么,仍然在Symfony的这一部分中苦苦挣扎。

我没有在这篇文章中包括所有的获取器和设置器,只是我为此而创建的。

1 个答案:

答案 0 :(得分:0)

为什么您的Actag-实体帽子还是tagId字段?您不需要在拥有侧上定义Id列。您必须定义一个OneToMany。

许多Acassettag由一个Actag拥有(由于Acassettag中的ManyToOne-Definition

因此,每个Acassettag都将需要字段actag_id和拥有的Actag的ID,该字段将由您的ManyToOne-定义自动生成

创建新的Acassettag实体并将其与现有Actag“连接”时,您需要Acassettag

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

    return $this;
}