【发布时间】:2011-03-27 18:11:35
【问题描述】:
我正在将原始 PHP 代码迁移到 CakePHP 并且遇到了一些问题。由于我在查询到 ORM 转换时遇到大问题,我临时使用原始 SQL。一切都很顺利,但我遇到了丑陋的代码,并不知道如何让它变得漂亮。我创建了DealersController 并添加了function advanced($condition = null)(它将使用参数1-15 和69 从AJAX 调用)。函数看起来像:
switch ($condition) {
case '1':
$cond_query = ' AND ( (d.email = \'\' OR d.email IS NULL) )';
break;
case '2':
$cond_query = ' AND (d.id IN (SELECT dealer_id FROM dealer_logo)';
break;
// There are many cases, some long, some like these two
}
if($user_group == 'group_1') {
$query = 'LONG QUERY WITH 6+ TABLES JOINING' . $cond_query;
} elseif ($user_group == 'group_2'){
$query = 'A LITLE BIT DIFFERENT LONG QUERY WITH 6+ TABLES JOINING' . $cond_query;
} else {
$query = 'A LITLE MORE BIT DIFFERENT LONG QUERY WITH 10+ TABLES JOINING' . $cond_query;
}
// THERE IS $this->Dealer->query($query); and so on
所以.. 如您所见,代码看起来很难看。我有两种变体:
1) 取出查询添加并为每个条件制作模型方法,然后将这些条件分离为函数。但这不是 DRY,因为主要的 3 个大查询几乎相同,如果我需要同时更改某些内容 - 我将需要更改 16+ 个查询。
2) 制作小的可重用模型方法/查询,这会从 DB 小块数据中提取出来,然后不要使用原始 SQL,而是使用方法。这会很好,但性能会很低,我需要它尽可能高。
请给我建议。谢谢!
【问题讨论】:
标签: sql cakephp model controller