php PDO :: FETCH_CLASS отображается на все свойства в нижнем регистре вместо camelCase - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть следующий пример класса, который сопоставляется с таблицей MySql (показано ниже).Когда я использую PDO :: FETCH_CLASS и выполняю * var_dump *, я вижу, что сопоставление происходит со всеми строчными свойствами.то есть «shortName» отображается на «shortname», но должно быть «shortName» (верблюжий регистр, как определенное свойство);

Почему оно сопоставляется со всеми строчными буквами и что я могу сделать, чтобы сопоставить их с точнымИмя sql из SELECT?


class Category {
  public $id;
  public $fkId;
  public $shortName;
  public $longName;

  public static function getCategories() {

    $db = ezcDbInstance::get();

    $stmt = $db->prepare('SELECT 
                                 id, 
                                 fk_id AS `fkId`,
                                 short_name AS `shortName`,
                                 long_name As `longName`
                          FROM `Category`');

    $stmt->execute();

    return $stmt->fetchAll(PDO::FETCH_CLASS, "Category");
  }
}

Ответы [ 2 ]

4 голосов
/ 25 сентября 2012

Измените это:

$db = ezcDbInstance::get();

$stmt = $db->prepare('SELECT...

на это:

$db = ezcDbInstance::get();
$db->setAttribute( PDO::ATTR_CASE, PDO::CASE_NATURAL );

$stmt = $db->prepare('SELECT ...
0 голосов
/ 25 февраля 2012

Похоже, что PDO не поддерживает заглавные буквы для переменных-членов.

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

class Category
{
    private $shortname;

    ...

    public function getShortname()
    {
        return $this->shortname;
    }

    public function setShortname($name)
    {
        $name = (string) $name;
        if (!$name)
        {
            throw new InvalidArgumentException('Can\'t delete the name.');
        }
        $this->shortname = $name;
    }

    ...
}

Это позволяет вам отображать поля независимо от их имени, и вы можете контролировать, можно ли записывать свойства или нет (например, ID).В любом случае они не должны быть публичными.

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

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