Динамически создавать объект записи доктрины - Symfony 1.4 - PullRequest
1 голос
/ 17 июня 2011

У меня был быстрый поиск, чтобы найти ответ на этот вопрос, но, честно говоря, я даже не на 100% знаю, что искать.

Это скорее проблема оптимизации, чем реальная проблема, но я мог бы помочь с помощью.

В моем проекте Symfony 1.4 я создал несколько методов для «получения или создания объектов», например:

protected function getOrCreateManufacturer($name)
{
    $manufacturer = ManufacturerTable::getInstance()->findOneBy('name', $name);

    if(!$manufacturer)
    {
        $manufacturer = new Manufacturer();
        $manufacturer->setName($name);
    }

    return $manufacturer;
}

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

protected function getOrCreateManufacturer($name)
{
    return $this->getOrCreateObject('Manufacturer', 'name', $name);
}

protected function getOrCreateObject($table, $field, $value)
{
    $object = Doctrine::getTable($table)->findOneBy($field, $value);

    if(!$object)
    {
        // create object here
        $object->set($field, $value);
    }

    return $object;

}

Но я не могу понять, как я могу создать экземпляр моих Объектов.

Все объекты, которые я пытаюсь создать, расширяются sfDoctrineRecord.

Если я не могу этого сделать, то это нормально, но было бы здорово, если бы это было возможно.

Приветствие.

1 Ответ

1 голос
/ 17 июня 2011

Вы можете попробовать простое:

if(!$object)
{
    $object = new $table();
    $object->set($field, $value);
}
...