Практически в каждой модели я пишу код , аналогичный приведенному ниже примеру кода. Он проверяет, отправляются ли такие параметры, как limit
, order
, conditions
... и т. Д., И изменяет запрос на основании этого.
Просто кажется, что ДОЛЖЕН быть лучший способ, так как большая часть этого материала повторяется много раз во многих моделях. Может быть, я могу использовать поведение? Или, может быть, что-то еще, что я полностью пропускаю?
Мне кажется, что я пытался заново изобрести колесо в том, что касается кода модели, но мне бы очень хотелось узнать, что такое колесо - то есть, что большинство людей делают для управления своим кодом модели? Я полагаю, это нормально для моделей, чтобы быть похожими, как это? В поисках наилучшей практики для этой общей концепции "аналогичного кода модели".
//Restaurant model
function getRestaurants($opts = null) {
//initialize
$findType = 'all';
$params['conditions'] = array();
//order
$params['order'] = 'Restaurant.name ASC';
if(!empty($opts['order'])) $params['order'] = $opts['order'];
//limit
if(!empty($opts['limit'])) {
$params['limit'] = $opts['limit'];
if($params['limit'] == 1) $findType = 'first';
}
/*... ETC ETC
- can pass conditions, pricing, days open....etc
- obviously some things are only for this model, but things like
limit, order, conditions...etc are for all my models
*/
//pagination
$paginate = false;
if(isset($opts['paginate'])) {
if($opts['paginate']) {
$paginate = true;
}
}
//either return the paginate options just created
if($paginate) {
return $params;
//or return the restaurant data found
} else {
$data = $this->find($findType, $params);
return $data;
}
}
В некоторых есть более сложные вещи, такие как - содержать или не включать определенные модели на основе отправленной опции ... и т. Д. И т. Д.
Я пытаюсь придерживаться концепции MVC и сохраняю все свои базы данных в моделях.