объект выборки pdo?

#php #pdo

#php #pdo

Вопрос:

Есть ли лучший способ вернуть объект результата db?

Я осведомлен « return $statement->fetchall(PDO::FETCH_CLASS, 'modelClassName'); «, но это работает только с функцией fetchall?

 class modelArea extends Model {

    public $areaID;
    public $postcode;

    public static function find($condition, $parameters) {
        $query = "SELECT * FROM area WHERE " . $condition;

        $statement = self::getDb()->prepare($query);
        if (!$statement->execute($parameters))
            return false;

        $query = $statement->fetch(PDO::FETCH_ASSOC);

        $a = new modelArea();

        $a->areaID = $query['areaID'];
        $a->postcode = $query['postcode'];

        return $a;
    }
}
  

Комментарии:

1. Вы также могли бы просто расширить класс модели из ArrayObject и передать массив конструктору или ->exchangeArray

Ответ №1:

PDOStatement::fetchObject Метод делает то, что вы хотите.

Вы можете использовать его как:

 $a = $statement->fetchObject('modelArea');
  

В результате $a будет создан объект класса modelArea , эквивалентный приведенному вами коду.

Комментарии:

1. Спасибо, как насчет этого? возвращает $statement->fetchObject(‘modelArea’);

Ответ №2:

Вы могли бы создать статический метод modelArea класса (или отдельного фабричного класса) и вызвать:

 modelArea::createFromArray($query);
  

или даже есть такой, который возвращает массив modelArea объектов

 modelArea::createFromStatement($stmt);