Не понимаю как реализовать модель...

Савелей

Новичок
Не понимаю как реализовать модель...

Модель у меня это пакет функций для получения данных...

к примеру так:

PHP:
class Photo_Model extends Model {

 function getAllphoto()
 {
   $photos = $this->findAll('photos');
   return $photos;
 }

 function getPhotoById($id)
 {
   $photo = $this->find('photos', "id=$id");
   return $photo;
 }


}
смысл понятен...

так вот одна модель, 2 контроллера - Фронт и Админка

но в фронте нужно получать только активные данные из бд, где в поле status = 'on'
как правильно это сделать...

1) менять все методы модели и делать типа if(!admin) where status = 'on' ......?
2) проверять в контроллере....:?
3) писать отдельно методы типа getAllActivePhoto().....?

кто как поступает?
 

Савелей

Новичок
можно...

но тогда венегрет будет типа getPhotoById($id,'on')

получаем двухсмысленый метод (дастань мне фотку по id и еще что-то там, хз что)

лучше наверно тогда в контроллере прямо из бд тянуть простым find('photos', 'status=on and id=$id') понятьней что мы делаем...
 

zerkms

TDD infected
Команда форума
получаем двухсмысленый метод (дастань мне фотку по id и еще что-то там, хз что)
почему 1 критерий (id) ты считаешь нормальным, а два (id + status) - уже двусмысленность?
это в любом случае лучше, чем модели раскрывать контекст выполнения.
 

Савелей

Новичок
так там по названию понятно getPhotoById что (достань мне фотку по id)

понятно что лучше чем контекст, ну вроде хочется соответствия названия метода и его действия....

короче я уже запутался...
 

rotoZOOM

ACM maniac
Савелей getPhotoByConditions и в качестве параметра передавать массив условий?
 

Духовность™

Продвинутый новичок
получаем двухсмысленый метод (дастань мне фотку по id и еще что-то там, хз что)
да! а потом ещё понадобятся какие-то условия и получится 3, 4, 5 аргументов! Ты начнешь путаться в методах, плодить код и получится венегред. Вот какой я нашел выход:

Есть метод меппера получения ОДНОГО объекта по ПАРМЕТРАМ:
PHP:
public function findByParams($params)
{
    return $this->findSimpleRowObjectByParams($params);
}
есть ЧАСТО используемый метод получения объекта по ID - он является упрощенной реализацией findByParams:
PHP:
public function findById($id)
{
    $params = array('where' => array('id = ?' => array($id)));
    return $this->findSimpleRowObjectByParams($params);
}
Что общего между ними? Общая идеология - метод findSimpleRowObjectByParams():

PHP:
/**
* Возвращает доменный объект с учетом массива параметров $params.
* 
* @param array
* @return object
*/
protected final function findSimpleRowObjectByParams($params)
{
    // ....
}
ключевое слово - масив параметров. В итоге я для получения обектов не пишу функции на каждый пшик, как в твоем случае, а пишу так:

PHP:
// Получаем статьи

// меппер
$Article_Mapper = new Article_Mapper();
// что получить
$params['what'] = 'article_header, 
article_description, 
article_url, 
UNIX_TIMESTAMP(article_date_create) as article_date_create';
// по какому условию
$params['where'] = 'article_active = 1';
// как сортировать
$params['order'] = array('article_date_create' => 'DESC', 'order' => 'DESC');
// лимит 
$params['limit'] = array('start' => 0, 'stop' => 3);

// теперь в $articles массив обектов, полученных по условию
$articles = $Article_Mapper->getObjectList($params);
тогда бы при задаче как у тебя, я бы написал:

PHP:
// меппер
$Photo_Mapper = new Photo_Mapper();

// по какому условию
$params['where'] = 'status = "On"';

// теперь в $photo массив обектов, полученных по условию status = "On"
$photos = $Photo_Mapper->getObjectList($params);
 

pilot911

Новичок
по-моему, проще


PHP:
 function getPhotoById($id, $where='')
 {
   $photo = $this->find('photos', "id=$id ".$where);
   return $photo;
 }
 

Савелей

Новичок
pilot911

проще то проще, но блин когда параметров станет много, то
getPhotoById у меня станет getPhotoByIdWyere.... бла-бла-бла

и как мне запомнить все параметры метода???

Варианты:
rotoZOOM и
triumvirat

намного удобней чем аргументы плодить, да и название метода должно отражать его действие, как мне понять в дебрях кода что getPhotoById() с вторым аргументом, не глядя в сам класс или доку?
 

pilot911

Новичок
Автор оригинала: Савелей
pilot911

проще то проще, но блин когда параметров станет много, то
getPhotoById у меня станет getPhotoByIdWyere.... бла-бла-бла

и как мне запомнить все параметры метода???

структуру таблицы придется изучить по-любому, будет это орм или простая модель

а какая разница, как передавать where-аргументы: через массив или строкой?

никакой разницы
 

Савелей

Новичок
Krishna
Спасибо конечно, но я не настолько повернутый:)

всем спасибо,
решил что вариант getPhotoByConditions(array) для меня удобней:)
 

Духовность™

Продвинутый новичок
но я не настолько повернутый
хехе
а ты в конце-концов придешь либо к доктрине, либо будешь свой костыль писать. ты его уже начал писать, столкнувшись с орм. а дальше будет ещё сложнее.
 

weregod

unserializer
я бы метод добавил

queryField, вызываемый из селектов (апдейтов?).
в фронт-контроллере туда добрасывать можно срезку.
 
Сверху