Laravel检查相关模型(更好的解决方案?)

时间:2016-08-03 15:28:20

标签: php laravel eloquent

我正在开发一个显示航班的应用。在fligh选择工作流程中,用户应首先选择目的地。在我的#34;选择目的地视图"我在我的数据库中显示所有国家/地区。他们中的一些人没有航班。我试图只展示有航班的国家,为了实现这一目标,我已经写过这种方法:

public function getDestinationsWithFlights()
    {
        $destinations = Destination::all();
        $destinationsWithFlights = [];

        for ($i = 0; $i < count($destinations) ; $i++)
        {
            if ($destinations[$i]->hasMany(Flight::class)->count() != 0)
            {
                $destinationsWithFlights[$i] = $destinations[$i];
            }
        }

        return $destinationsWithFlights;
    }

回应是

{
    "0": {
        "id": 1,
        "country": "argentina",
        "created_at": "2016-08-03 13:56:36",
        "updated_at": "2016-08-03 13:56:36"
    },
    "2": {
        "id": 3,
        "country": "spain",
        "created_at": "2016-08-03 13:56:36",
        "updated_at": "2016-08-03 13:56:36"
    }
}

我不知道这些钥匙的位置,&#34; 0&#34;和&#34; 2&#34;来自。而且我认为大多数都有更好的解决方案。而且,我也更喜欢这样的回答:

{
    "id": 1,
    "country": "argentina",
    "created_at": "2016-08-03 13:56:36",
    "updated_at": "2016-08-03 13:56:36"
},
{
    "id": 3,
    "country": "spain",
    "created_at": "2016-08-03 13:56:36",
    "updated_at": "2016-08-03 13:56:36"
}

你们有什么想法吗?或者你觉得我这样做很好吗?

1 个答案:

答案 0 :(得分:2)

flights关系添加到您的Destination模型:

public function flights()
{
    return $this->hasMany(Flight::class);
}

然后仅使用destinations查询flights,如:

$destinations = Destination::has('flights')->get();

您的getDestinationsWithFlights函数应该类似于:

public function getDestinationsWithFlights()
{
    return Destination::has('flights')->get()->toArray();
}