понедельник, 20 мая 2013 г.

X-Cart Next : Общие методы репозиториев моделей

Тем, кто работает в X-Cart Next с моделями - помните, с какими-бы моделями вы не работали, у вас всегда есть следующий минимальный набор методов:


public function findByIds(array $ids)
Достает список моделей по массиву их первичных ключей

public function findFrame($start = 0, $limit = 0)
Аналог findAll(), но можно взять фрейм из всех моделей, начиная с позиции $start длинной в $limit

public function count()
Считает количество моделей в репозитории.

Ну, и так не стоит забывать про методы, которых нет, но которые есть :) Это "магические" методы, которые предоставляет Doctrine 2. Это:

  • findOneByField($fieldValue)
  • fineByField($fieldValue)

Field в данном случае - это имя поля, по которому ведется поиск, на соответствие этого поля значению $fieldValue. Первый метод вернут одну первую модель, второй - все модели. Как пример, поиск одного продукта по цене выглядит так:

$product = \XLite\Core\Database::getRepo('XLite\Model\Product')->findOneByPrice(19.99);

На самом деле, эти "магические" методы упираются в обычные методы findOneBy и fineBy, которые принимают на вход хэш-массив значений. Поэтому этот же поиск продукт можно написать так:


$product = \XLite\Core\Database::getRepo('XLite\Model\Product')->findOneBy(array('price' => 19.99));

Но, так делать не стоит по простой причине - если какой-то модуль, в будущем, или даже вы сами в следующих версиях модуля, захотите как-то повлиять на эту выборку, то вам придется и создавать метод в классе-репозитории и менять все вызовы, где бы они не были. А вот если использовать "магические" методы - то достаточно просто написать метод в репозитории - и "магический" __call() больше срабатывать не будет, а будет вызываться ваш метод. Соответственно - изменений меньше, код читается лучше.

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

Отправить комментарий