#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);