繁体   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