簡體   English   中英

Laravel在多對多關系上復雜的內部聯接

[英]Laravel Complicated inner join on many to many relationship

客戶屬於3種不同的事物: rate_schedule_idelectricity_code_id和'territory_code_id'。 電力代碼和地區代碼確定它們使用哪個baseline 費率表會影響適用於這些基准的費率。

我有以下表格:

 1. customers
    - rate_schedule_id
    - territory_id
    - electricity_code_id

 2. rate_schedules
    - id

 3. utility_rates
    - id
    - rate_schedule_id

 4. baselines
    - id
    - electricity_code_id
    - territory_code_id
    - value
    - rank

 5. utility_rates_baselines
    - id
    - utility_rate_id
    - baseline_id

表5定義了utility_rates和基准之間的多對多關系。 我想做的查詢是:

Get all baselines that apply given the electricity code, territory code, and rate_schedule sorted by rank.

mysql中的哪個查詢:

SELECT *
FROM base_lines
INNER JOIN utility_rates_base_lines
ON base_lines.id = utility_rates_base_lines.base_line_id
INNER JOIN utility_rates
ON utility_rates.id = utility_rates_base_lines.utility_rate_id
WHERE base_lines.electricity_code_id = 1 
AND base_lines.territory_code_id = 1 AND utility_rates.rate_schedule_id = 1
ORDER BY base_line.rank;`

我可以使用編寫的范圍獲得給定電代碼和地區代碼的所有基線:

BaseLine::ofElectricityCodeId(5)->ofTerritoryCode(3);

但是,然后我得到了適用於不同rate_schedule的費率的所有基線。

我還可以獲取給定費率時間表的所有公用事業費率,例如:

UtilityRate::ofRateSchedule(2);

然后,我可以遍歷每個參數,並獲得給定rate_schedule和電碼的基線。

我也願意接受新的數據庫設計。 如何完成我的查詢?

正如@PedroMoreira所說,我能夠使用查詢生成器來構建查詢。 我花了太多時間試圖找到一個動態屬性來做到這一點,但這是最好的解決方案:

DB::table('base_lines')
        ->join('utility_rates_base_lines', 'base_lines.id', '=', 'utility_rates_base_lines.base_line_id')
        ->join('utility_rates', 'utility_rates.id', '=', 'utility_rates_base_lines.utility_rate_id')
        ->where('base_lines.electricity_code_id', '=', $electricityCodeId)
        ->where('base_lines.territory_code_id', '=', $territoryCodeId)
        ->where('utility_rates.rate_schedule_id', '=', $rateScheduleId)
        ->select('base_lines.*')->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM