Имеет ли таблица sfGuardUser первичный ключ? - PullRequest
0 голосов
/ 14 мая 2011

Я новичок в Symfony и Doctrine и пишу веб-приложение. Я добавил sfDoctrineGuardPlugin в свой проект. Когда я открываю файл schema.yml для плагина, я вижу это:

sfGuardUser:
actAs: [Timestampable]
columns:
  first_name: string(255)
  last_name: string(255)
  email_address:
    type: string(255)
    notnull: true
    unique: true
  username:
    type: string(128)
    notnull: true
    unique: true
  algorithm:
    type: string(128)
    default: sha1
    notnull: true
  salt: string(128)
  password: string(128)
  is_guest:
    type: boolean
    default: 0
  is_active:
    type: boolean
    default: 1
  is_super_admin:
    type: boolean
    default: false
  last_login:
    type: timestamp
indexes:
  is_active_idx:
    fields: [is_active]
relations:
  Groups:
    class: sfGuardGroup
    local: user_id
    foreign: group_id
    refClass: sfGuardUserGroup
    foreignAlias: Users
  Permissions:
    class: sfGuardPermission
    local: user_id
    foreign: permission_id
    refClass: sfGuardUserPermission
    foreignAlias: Users

Генерирует ли эта схема таблицу с первичным ключом (и если да, то как мне получить к ней доступ)? Я посмотрел онлайн, и большинство страниц, которые покрывают схему для sfGuardUser, отображают столбец идентификатора, который является первичным ключом. Что мне не хватает? Спасибо.

Ответы [ 2 ]

3 голосов
/ 14 мая 2011

Да, это id, доступ к которому осуществляется как sfGuardUser u -> u.id, как в ...

$user = Doctrine::getTable('sfGuardUser')->findOneById(55);

или ...

$q = Doctrine_Query::create()
  ->select('u.*')
  ->from('sfGuardUser u')
  ->where('u.id = ?', 55);
$q->execute();

Я думаю, что где-то в документации Doctrine написано, что Doctrine автоматически генерирует первичный ключ "id", если он не объявлен в файле YAML. Раньше было объявлено explicity в схеме sfGuardPlugin, но в Symfony 1.4.8 (я думаю) это просто не написано.

Одна вещь, на которую следует обратить внимание, это то, что в другом месте вашей схемы вам необходимо убедиться, что вы объявляете тот же числовой тип для другого конца отношения внешнего ключа, иначе это вызовет ошибку. Я думаю, что это просто type: integer, что вам нужно.

2 голосов
/ 14 мая 2011

Если первичный ключ не указан, доктрина создаст поле id с типом bigint и с первичным ключом.

...