php 链接Laravel一对一关系

t0ybt7op  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(113)

我有一张航班表。每个航班都有一个用于设置航班的字段。将有一个链的开始/结束,例如。您不能将下一个航班设置为已在链中的航班。我在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;
        }

这是可行的,但如果你有一个长链,这将运行很多查询来检索它们,有没有更有效的方法来做到这一点?

kdfy810k

kdfy810k1#

必须有一个共同的领域为所有的航班在您的链。例如,可以将根航班的id(链中的第一个航班)添加到Flight模型中。然后为每个航班添加到链中应共享此信息。有了这些信息,所有航班在汉宁可以得到一个查询。

edqdpe6u

edqdpe6u2#

使用透视表。flight_id、chain_id、created_at(主要前2列)。当航班起飞时,删除(或软删除)该航班的轴心。当显示链中的所有航班时,使用在desc创建的order by。

相关问题