У меня есть фабрика ProductFactory
Я могу создать такой продукт:
$product = ProductFactory::getProduct($id);
Теперь, в зависимости от того, какой тип продукта мы получаем, эта функция может возвращать класс типа Product
, потомка или Product
.
Но при использовании описанного выше метода класс $product
будет отвечать за подключение к базе данных и получение ее данных.
Поэтому, если бы я выбрал 20 продуктов для отображения в списке категорий, мне пришлось бы сначала получить список всех идентификаторов, а затем вызвать указанную выше функцию 20 раз. Это будет 21 обращение к базе данных.
Итак, я добавил в свою фабрику еще одну функцию:
$product = ProductFactory::createProduct($data);
Это делает то же самое, за исключением того, что вы передаете данные из базы данных, избавляя класс $product
от необходимости совершать поездку. (в зависимости от того, какие данные вы передаете, фабрика вернет правильный тип класса).
Итак, теперь я хочу сделать один вызов, чтобы выбрать все данные о продуктах и FETCH_INTO
мою фабрику, чтобы сгенерировать объект $ product для каждой строки.
Как я могу это сделать?
Обновить
Вот то, что я пробовал, но не помогло:
$stmt->setFetchMode(PDO::FETCH_INTO,ProductFactory::createProduct);
foreach($stmt as $product)
{
echo get_class($product) . '<br>';
}