Doctrine 2:OneToMany Relation,按外键排序

时间:2013-04-02 08:19:03

标签: symfony doctrine-orm sql-order-by one-to-many

我有三个实体(ProfileProfileValueValueProfileProfileValue具有一对多关系,与Value实体具有多对一关系。

是否可以从ProfileValuesProfile订购value id来获取orderby

如果我为ProfileValue中的启用字段添加非外键的"inrecognized field"注释,则可行。但对于外键,它失败了消息 /** * * @ORM\Table(name="profile") * @ORM\Entity */ class Profile { /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false, options={"unsigned"=true}) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var array $profileCValues * @ORM\OneToMany(targetEntity="ABC\XYZBundle\Entity\ProfileValue", mappedBy="profile", cascade={"persist"}) * @ORM\OrderBy({"value" = "ASC"}) */ private $profileValues; 。有什么想法吗?

ProfileValue

这是/** * ABC\XYZBundle\Entity\ProfileValue * * @ORM\Table(name="profile_value", indexes={@ORM\Index(columns={"profile_id"}), @ORM\Index(columns={"value_id"}) }) * @ORM\Entity */ class ProfileValue { /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false, options={"unsigned"=true}) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var integer $enabled * * @ORM\Column(name="enabled", type="boolean", length=1, nullable=true) */ private $enabled; /** * @var ABC\XYZBundle\Entity\Profile * @ORM\ManyToOne(targetEntity="ABC\XYZBundle\Entity\Profile", inversedBy="profileValues") * @ORM\JoinColumn(name="profile_id", referencedColumnName="id", nullable=true, onDelete="CASCADE") */ private $profile; /** * @var ABC\XYZBundle\Entity\Value * @ORM\ManyToOne(targetEntity="ABC\XYZBundle\Entity\Value") * @ORM\JoinColumn(name="value_id", referencedColumnName="id", onDelete="CASCADE") */ private $value; } 实体:

{{1}}

2 个答案:

答案 0 :(得分:3)

遇到同样的问题并通过添加带外键的新字段来解决它:

/**
 * @var integer $valueId
 *
 * @ORM\Column(name="value_id", type="integer")
 */
private $valueId;

然后你可以毫无问题地订购它:

/**
 * @var array $profileCValues
 * @ORM\OneToMany(targetEntity="ABC\XYZBundle\Entity\ProfileValue", mappedBy="profile", cascade={"persist"})
 * @ORM\OrderBy({"valueId" = "ASC"})
 */
private $profileValues;

答案 1 :(得分:2)

这有用吗?

/**
 * @var array $profileCValues
 * @ORM\OneToMany(targetEntity="ABC\XYZBundle\Entity\ProfileValue", mappedBy="profile", cascade={"persist"})
 * @ORM\OrderBy({"id" = "ASC"})
 */
private $profileValues;

我不使用XML,但这适用于YML:

oneToMany:
  foos:
    targetEntity:             Company\ProjectBundle\Entity\Foo
    mappedBy:                 bar
    orderBy:                  { 'id': ASC }