我有一张航班表。每个航班都有一个用于设置航班的字段。将有一个链的开始/结束,例如。您不能将下一个航班设置为已在链中的航班。我在laravel模型中设置了一个hasOne(linked_flight_after)和一个belongsTo(linked_flight_before)。
之后/之前的航班可以成功检索,但是如果我想检索之前/之后的所有航班,我认为唯一的方法是在一个循环中逐个遍历每个航班。
到目前为止,我已经厌倦了这个:
$flightsBefore = [];
$flightBefore = $flight->linked_schedule_before;
while ($flightBefore) {
array_unshift($flightsBefore, $flightBefore);
$flightBefore = $flightBefore->linked_schedule_before;
}
这是可行的,但如果你有一个长链,这将运行很多查询来检索它们,有没有更有效的方法来做到这一点?
2条答案
按热度按时间kdfy810k1#
必须有一个共同的领域为所有的航班在您的链。例如,可以将根航班的id(链中的第一个航班)添加到Flight模型中。然后为每个航班添加到链中应共享此信息。有了这些信息,所有航班在汉宁可以得到一个查询。
edqdpe6u2#
使用透视表。flight_id、chain_id、created_at(主要前2列)。当航班起飞时,删除(或软删除)该航班的轴心。当显示链中的所有航班时,使用在desc创建的order by。