значения доктрины по умолчанию и отношения

В mysql я могу установить значение по умолчанию для столбца следующим образом:

ALTER TABLE <Table> CHANGE <Column> DEFAULT <NEW_DEFAULT_VALUE>

Я могу получить значение по умолчанию:

SELECT DEFAULT(<Column>) FROM <Table> LIMIT 1

Можно ли реализовать эту концепцию с помощью Doctrine?

Что мне действительно нужно, так это такие методы в моем классе таблицы:

class UserTable extend Doctrine_Table {
    /* ... */

    /** 
     * @return Doctrine_Record
     */
    public function getDefaultProperty() {
        return ???;
    }
    public function setDefaultProperty($value) {
        /* $value can be either integer or Doctrine_Record */
    }
}

person Ski    schedule 30.05.2010    source источник


Ответы (2)


Посмотрим, сможем ли мы в этом разобраться.

Строка 567 из Record.php, часть метода assignDefaultValues(), который заполняет значения по умолчанию при создании объекта, говорит:

$default = $this->_table->getDefaultValueOf($column);

Таким образом, вам не нужно добавлять getDefaultProperty(), вы можете использовать:

$userTable = Doctrine::getTable('User');
$defaultName = $userTable->getDefaultValueOf('name');

Однако вы, кажется, хотите, чтобы getDefaultProperty() возвращал Doctrine_Record. Если вы просто хотите вернуть целый объект, для которого установлены все значения по умолчанию, я уверен, что вы можете просто использовать:

$defaultUser = new User(); (См. доктрину руководство по значениям по умолчанию)

Но убедитесь, что ваши значения по умолчанию определены в schema.yml, а не только в базе данных. Doctrine не будет считывать значения по умолчанию из базы данных и полагается на схему, чтобы сообщить ей, что делать.

Дайте мне знать, как это работает.

Привет, ~J

person Jordan Feldstein    schedule 27.01.2011

Класс Doctrine_Table содержит метод getDefaultValueOf, который делает то, что вы ищете. Итак, если у вас есть запись доктрины, вы можете написать что-то вроде: $record->getTable()->getDefaultValueOf('address_line_1'); где 'address_line_1' — это столбец. Надеюсь это поможет.

person Mario Awad    schedule 27.01.2011