внешний ключ никогда не сохраняется с помощью встроенного отношения - PullRequest
1 голос
/ 13 февраля 2012

У меня много часов, чтобы найти решение для сохранения внешнего ключа в материнской таблице.Я пытаюсь использовать встраивание отношений с Symfony 1.4 (у меня также есть AhDoctrineEasyEmbeddedRelationsPlugin).

Когда я читаю документацию Symfony здесь

http://www.symfony -project.org / more-with-symfony / 1_4 / ru / 06-Advanced-Forms

схема выглядит так:

Product:
  columns:
    name:           { type: string(255), notnull: true }
    price:          { type: decimal, notnull: true }
ProductPhoto:
  columns:
    product_id:     { type: integer }
    filename:       { type: string(255) }
    caption:        { type: string(255), notnull: true }
  relations:
    Product:
      alias:        Product
      foreignType:  many
      foreignAlias: Photos
      onDelete:     cascade

embedRelation выглядит так:

// lib/form/doctrine/ProductForm.class.php
public function configure()
{
  // ...

  $this->embedRelation('Photos');
}

Inв моем случае я не могу сделать иначе, наоборот, продукт имеет ключи отношения, у меня есть что-то вроде этого:

Product:
  columns:
    name:           { type: string(255), notnull: true }
    price:          { type: decimal, notnull: true }
    photoid:        { type: integer }
    ownerid:        { type: integer }
  relations:
    Photo:
      local:        photoid
      foreign:      id
      type:         one
    Owner:
      local:        ownerid
      foreign:      id
      type:         one
Photo:
  columns:
    id :            { type: integer }
    filename:       { type: string(255) }
    caption:        { type: string(255), notnull: true }
owner:
  columns:
    id :            { type: integer }
    firstname:      { type: string(255) }
    lastname:        { type: string(255), notnull: true }

и embedRelation:

// lib/form/doctrine/ProductForm.class.php
public function configure()
{
  // ...
  $this->embedRelation('Photo');
  $this->embedRelation('Owner');
}

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

Когда я сохраняю новую форму, фотография и объект владельца сохраняются в таблице, иидентификаторы создаются с последовательностями.Проблема в том, что продукт никогда не обновляется.photoid и ownerid остаются нулевыми.Это как встроенная форма Фотография и Владелец сохраняются после корневой формы.

Возможно ли в этом случае использовать embedrelation?Если тогда, как правильно сохранить внешние ключи в таблице Product, когда корневая форма сохраняется в processForm?В чем дело, спасибо за помощь.

1 Ответ

0 голосов
/ 13 февраля 2012

В PhotoForm.class.php используйте:

$this->useFields(array('filename', 'caption'));

И прочитайте документацию

...