Я создаю свое первое сопоставление ассоциаций для объединения.Это также первый раз, когда я использовал внешний ключ в pgSQL.
Я работаю с ZF3.Я получаю сообщение об ошибке:
An exception occurred while executing 'SELECT p0_.reference AS reference_0, p0_.meta_keyword_reference AS meta_keyword_reference_1, p0_.add_date AS add_date_2, p0_.add_membership_reference AS add_membership_reference_3, p0_.remove_date AS remove_date_4, p0_.remove_membership_reference AS remove_membership_reference_5 FROM page_about_meta_keyword_link p0_ INNER JOIN meta_keyword m1_':
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at end of input LINE 1: ...page_about_meta_keyword_link p0_ INNER JOIN meta_keyword m1_
Я пытаюсь создать запрос:
SELECT MetaKeywords.Keyword FROM PageAboutMetaKeywordLink INNER JOIN MetaKeywords ON PageAboutMetaKeywordLink.MetaKeywordReference = MetaKeywords.Reference WHERE PageAboutMetaKeywordLink.RemoveDate IS NULL ORDER BY MetaKeywords.Keyword ASC
Исходя из опыта работы с базой данных, я ожидаю, что он создает ошибку из-за отсутствия
ON p0_.meta_keyword_reference = m1_reference
Я не понимаю, как общаться Присоединиться.На основании документации я ожидал, что это будет автоматически.Возможно, я неправильно понял.
Таблицы, к которым я пытаюсь присоединиться, являются page_about_meta_keyword_link.meta_keyword_reference ON meta_keyword.reference.Это первый раз, когда я создал внешний ключ в pgSQL.
Это структура таблицы для page_about_meta_keyword_lin k
CREATE TABLE public.page_about_meta_keyword_link
(
reference bigint NOT NULL DEFAULT nextval('page_about_meta_keyword_link_reference_seq'::regclass),
meta_keyword_reference bigint,
add_date timestamp with time zone DEFAULT now(), -- UTC
add_membership_reference bigint,
remove_date timestamp with time zone, -- UTC
remove_membership_reference bigint,
CONSTRAINT page_about_meta_keyword_link_pkey PRIMARY KEY (reference),
CONSTRAINT page_about_meta_keyword_link_fk FOREIGN KEY (meta_keyword_reference)
REFERENCES public.meta_keyword (reference) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT page_about_meta_keyword_link_reference_unique UNIQUE (reference)
)
Это meta_keyword
CREATE TABLE public.meta_keyword
(
reference bigint NOT NULL DEFAULT nextval('meta_keyword_reference_seq'::regclass),
keyword text,
effective_date timestamp with time zone DEFAULT now(), -- UTC
membership_reference bigint,
CONSTRAINT meta_keyword_pkey PRIMARY KEY (reference),
CONSTRAINT meta_keyword_reference_unique UNIQUE (reference)
)
Это запрос, который я создал в Сервисе;Полная служба найдена здесь .
$repository = $this->entityManager->getRepository(PageAboutMetaKeywordLink::class);
$keywords = $this->entityManager->getRepository(MetaKeyword::class);
$qb = $repository->createQueryBuilder('l');
$qb ->join('\Application\Entity\MetaKeyword' , 'k')
->expr()->isNull('l.removeDate');
return $qb->getQuery()->getResult();
Созданное мной сопоставление ассоциации предназначено для meta_keyword_reference;Полная сущность найдена здесь .
/**
* @var int|null
*
* @ORM\ManyToOne(targetEntity="MetaKeyword")
* @ORM\JoinColumn(name="meta_keyword_reference", referencedColumnName="reference")
* @ORM\Column(name="meta_keyword_reference", type="bigint", nullable=true)
*/
private $metaKeywordReference;
Я не внес никаких изменений в сущность MetaKeywords.Найдено здесь .
В целом, различные разделы веб-сайта будут использовать мета-ключевые слова.Если я правильно понимаю связь, которую я пытаюсь установить, это ManyToOne.
Я хочу оставить хороший отзыв для других новичков, поскольку они путешествуют с Zend Framework 3 - Doctrine.Пожалуйста, сообщите об изменениях, которые я должен внести в этот пост, чтобы он был ясным, понятным и лаконичным, чтобы я получал необходимую помощь, и другие получат от этого пользу в будущем.