[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: вопрос по ORM (doctrine2)
Bolik
привет!

у меня есть 2 таблицы:
product и portfolio. связаны они по ID продукта, т.е. в первой таблице есть ID (Primary Key) и название (Unique) продукта, а в другой productname_id. связь ManyToOne unidirectional.

когда добавляю новый продукт в портфолио, названия которого еще нет первой таблице, то все работает отлично. а когда продукт уже есть, то пытаюсь вставить только productname_id в таблицу портфолио. но ничего не получается, в базу попадает NULL.. не могу понять в чем моя ошибка?

спасибо!
kaww
когда продукт уже есть:

$product= $entityManager->getRepository("My\Product")->find(15);
$portfolio->setProduct($product);
$entityManager->flush();


Получается что у вас в портфолио может находится только один продукт?
Цитата (Bolik @ 27.09.2013 - 22:52)
связь ManyToOne

Bolik
спасибо. вот как я это сейчас делаю:


public function createAction(Request $request) {
$product = new Portfolio();
$form = $this->createForm(new PortfolioType(), $product);
$form->handleRequest($request);
if ($form->isValid()) { //проверяем отправлена ли форма
$products = $this->getDoctrine()
->
getRepository('BookingBookingBundle:Product')
->
findOneByProductname($form->getNormData()->getProductname()->getProductname()); //находим есть ли такой домен уже в таблице product
if($products) { //если находим, то
$product->setProductname(); //в строку productname ничего не пишем
$productname->setProductnameid(trim($products->getId())); //пишем в переменную айдишник домена
$em = $this->getDoctrine()->getManager();
$em->persist($product);
$em->flush(); //запись в базу данных. но вместо айдишника попадает NULL
return $this->redirect($this->generateUrl('booking_portfolio'));
}
$em = $this->getDoctrine()->getManager(); //если продукта с таким названием нет, то все работает отлично
$em->persist($product);
$em->flush();
return $this->redirect($this->generateUrl('booking_portfolio'));
}
return $this->render('BookingBookingBundle:Portfolio:createportfolio.html.twig', array( 'form' => $form->createView(), 'message' =>'Insert new Product'));
}


Цитата


Получается что у вас в портфолио может находится только один продукт?
Цитата (Bolik @ 27.09.2013 - 22:52)
связь ManyToOne



ManyToOne значит, что в таблице Портфолио может быть много продуктов с одним и тем же ID, а в таблице продукт может быть только один продукт (unique key). поправьте меня, если что-то не так.

пробовал связь OneToOne, но тогда нужно, чтоб и в портфолио айдишники продуктов не повторялись.

и еще вопрос: может мне кто-то доступно объяснить в чем разница между Unidirectional и Bidirectional?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.