douyou7072 2015-06-05 11:04
浏览 86

Laravel Eloquent:查询多个模型的复杂关系

Update: Solved, problem was not eloquent, it's quite efficient in using multiple scopes across multiple models. I had an output in my view which would query for each resident the occupations, room and floor. This led to over 2600 queries for ~200 residents and was the reason for my performance drop. I now use eager loading to get all occupations and rooms with the first query by adding ->with(['occupation.room']).

I have a model which consists of residents who live in rooms. Those rooms are rented out for a certain period of time which is why we have a table occupations. This table determines which resident lives where. Here's a visualisation: Relationmodel

My problem is that Eloquent has no efficient way to determine all residents living house X or all residents on floor Y (see floor model for house attr).

I am using query scopes on Room:

public function scopeHouse($query, $house) {
    return $query->whereHas('floor', function($q) use($house) {
        $q->where('house', $house);
    });
}

On Occupation:

public function scopeHouse($query, $house) {
    return $query->whereHas('room', function($q) use($house) {
        $q->house($house);
    });
}

And Resident:

public function scopeHouse($query, $house) {
    return $query->whereHas('occupation', function($q) use($house) {
        $q->house($house);
    });
}

Which is obviously not very efficient. I could just query all occupations and then query rooms and residents individually but that would destroy eloquents nice fluent api.

Any suggestions?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 微信小程序协议怎么写
    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看