Примечание: Неопределенный индекс: язык

Этот вопрос задавался так много раз с разными данными и по-разному, но я не вижу, что я сделал не так.

Я пытаюсь запросить ArticleFamily и получить записи, относящиеся к определенному языку.

    $qb = $this->em->createQueryBuilder();

    $qb->select('af', 'afl')
        ->from('DatabaseBundle:ArticleFamily', 'af')
        ->leftJoin('af.articleFamilyLanguages', 'afl')
        ->where('afl.language = :languageId')
        ->setParameter('languageId', 3);

Этот запрос возвращает ошибку Notice: Undefined index: language, поэтому я предполагаю, что это связано с сопоставлениями, но я не вижу, где ошибка.

СтатьяСемейная Сущность

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

/**
 * @var string
 *
 * @ORM\Column(name="article_name_key", type="string", length=50, nullable=false)
 */
private $articleNameKey;

/**
 * @var string
 *
 * @ORM\Column(name="short_key", type="string", length=5, nullable=false)
 */
private $shortKey;

/**
 * @var boolean
 *
 * @ORM\Column(name="asset_synced", type="boolean", nullable=false)
 */
private $assetSynced;

/**
 * @var \Doctrine\Common\Collections\Collection|Article[]
 *
 * @ORM\OneToMany(
 *      targetEntity="DatabaseBundle\Entity\Article",
 *      mappedBy="articleFamily",
 *      cascade={"all"},
 *      orphanRemoval=true)
 * @ORM\OrderBy({"articleId" = "ASC"})
 */
private $relatedArticles;

/**
 * @var \Doctrine\Common\Collections\Collection|Article[]
 *
 * @ORM\OneToMany(
 *      targetEntity="DatabaseBundle\Entity\Asset",
 *      mappedBy="articleFamily",
 *      cascade={"all"},
 *      orphanRemoval=true)
 */
private $relatedAssets;

/**
 * @var \Doctrine\Common\Collections\Collection|ArticleFamilyLanguage[]
 *
 * @ORM\OneToMany(
 *      targetEntity="DatabaseBundle\Entity\ArticleFamilyLanguage",
 *      mappedBy="articleFamily",
 *      cascade={"all"},
 *      orphanRemoval=true)
 * @ORM\OrderBy({"language" = "ASC"})
 */
private $articleFamilyLanguages;

/**
 * @var \Doctrine\Common\Collections\Collection|ArticleFamilyInCategory[]
 *
 * @ORM\OneToMany(
 *      targetEntity="DatabaseBundle\Entity\ArticleFamilyInCategory",
 *      mappedBy="articleFamily",
 *      cascade={"all"},
 *      orphanRemoval=true)
 */
private $articleFamilyInCategories;

/**
 * Constructor
 */
public function __construct()
{
    $this->relatedArticles = new \Doctrine\Common\Collections\ArrayCollection();
    $this->relatedAssets = new \Doctrine\Common\Collections\ArrayCollection();
    $this->articleFamilyLanguages = new \Doctrine\Common\Collections\ArrayCollection();
    $this->articleFamilyInCategories = new \Doctrine\Common\Collections\ArrayCollection();
}

СтатьяFamilyLanguage Entity

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

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=50, nullable=true)
 */
private $name;

/**
 * @var string
 *
 * @ORM\Column(name="seo_description", type="string", length=156, nullable=true)
 */
private $seoDescription;

/**
 * @var string
 *
 * @ORM\Column(name="seo_keywords", type="string", length=255, nullable=true)
 */
private $seoKeywords;

/**
 * @var string
 *
 * @ORM\Column(name="seo_title", type="string", length=56, nullable=true)
 */
private $seoTitle;

/**
 * @var string
 *
 * @ORM\Column(name="description", type="text", nullable=true)
 */
private $description;

/**
 * @var string
 *
 * @ORM\Column(name="description_important", type="text", nullable=true)
 */
private $descriptionImportant;

/**
 * @var string
 *
 * @ORM\Column(name="description_info", type="text", nullable=true)
 */
private $descriptionInfo;

/**
 * @var string
 *
 * @ORM\Column(name="description_info_visible", type="text", nullable=true)
 */
private $descriptionInfoVisible;

/**
 * @var string
 *
 * @ORM\Column(name="description_discount", type="text", nullable=true)
 */
private $descriptionDiscount;

/**
 * @var string
 *
 * @ORM\Column(name="thesaurus", type="text", nullable=true)
 */
private $thesaurus;

/**
 * @var string
 *
 * @ORM\Column(name="important_feature", type="string", length=128, nullable=true)
 */
private $importantFeature;

/**
 * @var Language
 *
 * @ORM\ManyToOne(targetEntity="DatabaseBundle\Entity\Language")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="language_id", referencedColumnName="id")
 * })
 */
protected $language;

/**
 * @var ArticleFamily
 *
 * @ORM\ManyToOne(targetEntity="DatabaseBundle\Entity\ArticleFamily", inversedBy="articleFamilyLanguages")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="article_family_id", referencedColumnName="id")
 * })
 */
private $articleFamily;

Языковая сущность

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

/**
 * @var string
 *
 * @ORM\Column(name="iso2", type="string", length=2, nullable=true)
 */
private $iso2;

/**
 * @var string
 *
 * @ORM\Column(name="nav_code", type="string", length=3, nullable=true)
 */
private $navCode;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=50, nullable=true)
 */
private $name;

/**
 * @var boolean
 *
 * @ORM\Column(name="active", type="boolean", nullable=true)
 */
private $active;

person Herr Nentu'    schedule 02.07.2015    source источник


Ответы (1)


Во-первых, вы указываете значение идентификатора внешнего ключа вместо объекта Language в предложении where. Вы можете попробовать использовать функцию IDENTITY

->where('IDENTITY(afl.language) = :languageId')

Функции DQL

person walkietalkie    schedule 02.07.2015