Внедрение Symfony «один ко многим» с несколькими формами - PullRequest
0 голосов
/ 08 июля 2010

У меня возникла простая проблема с Symfony.

В этом примере у меня есть таблица User, LookingFor и LookingForNames.Таблица user содержит учетную запись пользователя и имеет отношение к LookingFor.Таблица LookingFor содержит любые отношения между пользователем и LookingForNames.

Пример: пользовательская цепочка может содержать две записи в таблице LookingFor для знакомства и разговора, которые ищутся из таблицы LookingForNames на основеtype_id из LookingFor и LookingForNames.

Проблема, с которой я сталкиваюсь, заключается в том, что я встраиваю отношение для LookingFor в форму пользователя.Он показывает форму LookingFor дважды, потому что пользователь выбрал, что он ищет знакомства и общение.Если я выберу больше для этого пользователя, будет отображаться больше раз.

например.проблемы

LookingFor Form - Instance #1
Dating - Checked
Talk - Not Checked
Friends - Not Checked

LookingFor Form - Instance #2
Dating - Not Checked
Talk - Checked
Friends - Not Checked

Решением будет отображение таблицы LookingFor один раз в формате флажка, в котором выбор пользователя будет предварительно выбран.

например.решения

LookingFor Form - Only One Instance
Dating - Checked
Talk - Checked
Friends - Not Checked

schema.yml

LookingFor:
  connection: doctrine
  tableName: looking_for
  columns:
    type_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    uid:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
  relations:
    LookingForNames:
      local: type_id
      foreign: type_id
      type: many
LookingForNames:
  connection: doctrine
  tableName: looking_for_names
  columns:
    type_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    LookingFor:
      local: type_id
      foreign: type_id
      type: many
User:
  connection: doctrine
  tableName: user
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    email:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    gender:
      type: string(6)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    age:
      type: date(25)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    city:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    state:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    country:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    profilepic:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      default: profileblank.jpg
      notnull: false
      autoincrement: false
  relations:
    LookingFor:
      local: id
      foreign: uid
      type: many
      foreignType: many

UserEditForm

class UserEditForm extends BaseUserForm
{
  public function configure()
  {
            $this->embedRelation('LookingFor');
  }
}

LookingForForm

class LookingForForm extends BaseLookingForForm
{
  public function configure()
  {
      $this->useFields(array('type_id'));
      $this->widgetSchema['type_id'] = new sfWidgetFormChoice(array(
          'choices' => Doctrine_Core::getTable('LookingForNames')->getFormChoiceNames(),
          'expanded' => true,
          'multiple' => true
       ));
   }
}

Ответы [ 3 ]

1 голос
/ 10 июля 2010

Действительно ли LookingForNames необходимо?Похоже, что вы пытаетесь добавить поддержку для создания новых категорий LookingFor, например, «Любители еды», «Люди с маленькими шляпами» и т. Д.

Если вы действительно думаете, что позже вы добавите много этих LookingForNamesтогда это имеет смысл, но если вы создаете сайт знакомств / социальных сетей, я не могу представить, что вы будете делать это очень часто.Если вам не нужно часто добавлять категории, попробуйте следующую схему:

LookingFor:
  uid:
    integer
  dating:
    integer
  friends:
    integer
  small_hats:
    integer
  ...

Таким образом, LookingFor может даже быть один на один с пользователями.

0 голосов
/ 10 июля 2010

Возможно, это проблема вашей схемы. Пользователь не должен иметь отношения с LookingFor, пользователи должны иметь отношение многие ко многим с LookingForNames. Ищу в качестве refClass.

Если вы не хотите изменять свою схему, вы также можете исправить это, вручную вставив форму. Посмотрите, что внутренне делает embedRelation.

0 голосов
/ 10 июля 2010

Взгляните на схему sfGuard, поскольку она делает то же самое, но связывает пользователей с группами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...