Find()每个匹配字段CakePHP中的一个

时间:2010-11-30 21:21:24

标签: cakephp model find

Trips hasMany Legs

机场没有关联

如何使用CakePHP找到每个目的地机场最便宜的旅程?

现在,我唯一想到的就是通过各种机场进行预告。这将需要数百个查询到数据库(我认为这不是最快的方式)。

function getCheapestTrip($origin){

$airports=$this->Airport->getAirports();
foreach($airports as $airport):
$cheapest_flights=$this->Trip->find('first', 
array(
'conditions'=>array('Leg.origin'=>$origin, 'MIN(Trip.price) as price'),
'fields'=>array('Trip.origin','price','Leg.destination','Leg.depart','Leg.arrive'),
'recursive'=>2,
));
 endforeach;
}
}  

另外,我认为这种数据类型的东西应该在每个CakePHP约定的模型中(胖模型,瘦模式控制器)。我读到要调用不同模型的函数,比如getAirports,我可以使用loadModel但是我在CakePHP的控制器方法部分找到了它。如何将另一个模型的数据/模型函数转换为其他模型?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您正在寻找更好的算法,我现在没有解决方案。

我的设计解决方案:基本上你应该在你的目的地机场增加一个字段,每当你添加一个新航班时都会更新,这样你就可以直接在你的目的地记录中获得你的信息了。

如果我理解你的问题,那就是这个。我不是英国人,所以我不熟悉与旅行相关的“腿”的语义(对我而言,它是身体的一部分)

答案 1 :(得分:0)

您正在解决的问题是旅行商问题:http://en.wikipedia.org/wiki/Travelling_salesman_problem

从我读过谷歌地图的方式来看,你需要预先计算最常见的路线和连接。将预先计算的信息保存在廉价的缓存中(memcache)。基本上,您将无法每次重新计算,因此计算一些常用的并构建预先计算的缓存。

WRT算法,一些谷歌搜索将成为你的朋友的提示和技巧。这个问题已经解决了很多次(没有一个计算效率很高,这就是你应该预先计算和缓存的原因)。

答案 2 :(得分:0)

第二个问题“如何在另一个模型中加载模型?”的答案。可以找到here