[英]Laravel Complicated inner join on many to many relationship
客戶屬於3種不同的事物: rate_schedule_id
, electricity_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.