2

我有三个实体(ProfileProfileValueValue
AProfile与 具有一对多关系,后者与实体ProfileValue具有多对一关系。Value

是否有可能从 获得相关ProfileValuesProfile,由 订购的value id

如果我orderby为非外键添加注释,如 中的启用字段ProfileValue,它可以工作。但是对于外键,它失败了 message "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;
}
4

2 回答 2

4

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

/**
 * @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;
于 2014-03-25T14:45:19.770 回答
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 }
于 2013-10-16T09:51:03.487 回答