Духовность™
Продвинутый новичок
покритикуйте метод!
Очень часто приходится делать массу методов типа findById, findByUrl и пр. Т.е. логика SQL во всех методах разная, но сортировка, where и limit зачастую необходимо изменять. Например, когда получаем список комментариев, то метод должен уметь сортировать и так и эдак, и находить только определенные комменты и пр. условия.
Решил во всех базовых классах, там, где нужно, реализовать всё через массив параметров:
Вызывается так:
Очень часто приходится делать массу методов типа findById, findByUrl и пр. Т.е. логика SQL во всех методах разная, но сортировка, where и limit зачастую необходимо изменять. Например, когда получаем список комментариев, то метод должен уметь сортировать и так и эдак, и находить только определенные комменты и пр. условия.
Решил во всех базовых классах, там, где нужно, реализовать всё через массив параметров:
PHP:
// вытаскивает список комментариев
public function selectList($params = array())
{
$params = self::makeSqlFromParams($params);
// в самом SQL метода - никаких явных WHERE, ORDER, LIMIT!
$res = $this->db->query('SELECT * FROM table '.$params['where'].$params['order'].$params['limit']);
// далее что-то делаем с $res..........
}
/*
* Служебная функция формирования SQL запросов из массива параметров params.
*/
protected static function makeSqlFromParams($params)
{
$params['where'] = !empty($params['where']) ? ' WHERE '.$params['where'].' ' : '';
$params['limit'] = isset($params['start']) && is_numeric($params['start'])
? ' LIMIT '.$params['start'].
(isset($params['stop']) && is_numeric($params['stop'])
? ', '.$params['stop']
: ''
)
: '';
$order = '';
if (isset($params['order']))
{
foreach ($params['order'] as $field => $method)
{
$order .= ' ORDER BY '.$field.' '.$method.', ';
}
$order = rtrim($order, ', ');
}
$params['order'] = $order;
return $params;
}
PHP:
$comments->selectList(array('where' => 'id_record ='.$post->getId(),
'order'=>array('id_comment'=>'DESC'),
'start'=>$startLimit,
'stop'=>$stopLimit
)
);