【发布时间】:2011-12-07 16:12:23
【问题描述】:
我想在模型(MVC/框架)中创建一个“搜索”类,我想知道该方法应该如何构造。
有两种类型的搜索和SQL查询包含一些JOIN。
这将允许客户从一个搜索文本框中输入邮政编码、公司名称或城市:
SELECT * FROM Shop as S
JOIN shop_options as O on O.ShopID = S.ShopID
JOIN shop_openhours as OH on OH.ShopID = S.ShopID
WHERE (O.postcode = :postcode OR S.company LIKE :companyName OR S.city = :townName)
如果客户通过 url 访问特定城镇,例如:/town/London
那么查询将如下所示:
SELECT * FROM Shop as S
JOIN shop_options as O on O.ShopID = S.ShopID
JOIN shop_openhours as OH on OH.ShopID = S.ShopID
WHERE S.city = :townName
需要在模型中对数据进行操作,以确定商店是开门还是关门。
这是我想出的快速设计:
class modelSearch extends Model {
public $id;
public $shopName;
public $isOpen = false;
public static function findAll($searchType) {
$SQL = "SELECT * FROM Shop as S
JOIN shop_options as O on O.ShopID = S.ShopID
JOIN shop_openhours as OH on OH.ShopID = S.ShopID
WHERE (O.postcode = :postcode OR S.company LIKE :companyName OR S.town = :townName)";
//fetch data into $data
$search = array();
foreach ($Dbdata as $data) {
$searchModel = new modelSearch();
$searchModel->isOpen = modelSearch::isShopOpen($data['opentime'], $data['closetime']);
$searchModel->id = $data['id'];
$searchModel->shopName = $data['shopName'];
$search[] = $searchModel;
}
return $search;
}
public static function findByTown($search) {
//Same code as findAll() apart from SQL query (WHERE)
//WHERE S.town = :townName
}
public static function isShopOpen($open, $close) {
$min = ($open > 123) ? $open : 345; // Earliest allow time
if ($close < $min)
//some block code here
return true;
return false;
}
}
我走在正确的道路上还是可以改进什么?
【问题讨论】:
-
有效吗?你在寻找什么答案?
标签: php model-view-controller oop class model