Trips hasMany Legs hasMany Segments
在我的航班搜索应用程序中,我有一个返回唯一Leg.destination(s)的函数。该功能用于跳闸控制器方法。我是否将该功能放入旅行模型或腿模型中?如果在腿部模型中,我用$ this-> Trip-> Leg-> findUniqueDests .....调用它?我问,因为我想坚持CakePHP惯例。谢谢!
//code that finds ALL destinations for each Leg
$destinations=$this->Trip->Leg->find('all', array('limit'=>100,'fields'=>'Leg.destination'));
//code that finds the unique destinations (to be used to search all flights for a particular city
function findUniqueDests($destinations){
$unique_destinations = array();
foreach ($destinations as $dest)
{
if(!in_array($dest, $unique_destinations))
{
$unique_destinations[] = $dest;
sort($unique_destinations);
}
}
return $unique_destinations;
}
答案 0 :(得分:3)
是的,你会把它放在腿模型中。这将允许您从任何其他相关模型调用该方法:
// Trip Controller
$this->Trip->Leg->findUniqueDests($destinations);
// Leg Controller
$this->Leg->findUniqueDests($destinations);
// Segment Controller
$this->Segment->Leg->findUniqueDests($destinations);
要知道它应该在模型中,感谢你。许多以CakePHP开头的人都把他们所有的方法塞进控制器中。
以这种方式在模型中执行此操作允许您在整个应用程序中重用代码。实际上,这种效用函数可以放在任何模型中。但由于它处理腿部,最合乎逻辑的家庭将是腿部模型。
问题:为什么每次将目标添加到阵列时都要进行排序?这将更加优化:
function findUniqueDests($destinations) {
$unique_destinations = array();
foreach ($destinations as $dest) {
if(!in_array($dest, $unique_destinations)) {
$unique_destinations[] = $dest;
}
}
return sort($unique_destinations);
}