如何使用精确的数据透视表关系

Posted

技术标签:

【中文标题】如何使用精确的数据透视表关系【英文标题】:how to use exact pivot table relationship 【发布时间】:2019-05-17 21:10:21 【问题描述】:

我在数据库(sql)中有四个表:

客户表:

id
name

学分表:

id
name
count

customer_credit 表(数据透视表):

customer_id
credit_id
expiry_date

消费者表:

id
customer_id

这是带有 laravel 的 SPA 应用程序(Web 库)。 如何从消费者表中接收(仅登录客户)记录,在 customer_credit 表中有条件的可用记录没有过期日期,我们可以计算剩余积分。更多解释是我们正在尝试从我们的游泳池和健身房的客人那里收集入口和出口日志,我们希望在 credits 表中获得确切的 customer_credit 表 id 的计数。

【问题讨论】:

能否请您查看此链接laravel.com/docs/5.7/eloquent-relationships#many-to-many。希望对您有所帮助。 【参考方案1】:

第一个选项,使用Laravel Query Builder

DB::table('consumers')
     ->select('consumers.*')
     ->join('customers', 'consumers.customer_id', '=', 'customers.id')
     ->join('customer_credit', 'customers.id', '=', 'customer_credit.customer_id')
     ->join('credits', 'customer_credit.credit_id', '=', 'credits.id')
     ->where('credits.count', '>', 0)
     ->where('customer_credit.expiry_date', '>=', date('Y-m-d'))
     ->get();

第二个选项,使用Laravel Eloquent。如果您选择第二个并需要帮助,您应该在此处分享您的模型结构。

另请阅读此主题以查看差异:Laravel Eloquent vs query builder - Why use eloquent to decrease performance

【讨论】:

以上是关于如何使用精确的数据透视表关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何使用多个数据透视表关系

如何使用 Eloquent 实现自引用数据透视表关系

laravel 使用具有多对多关系数据透视表的策略

数据透视表的laravel关系问题

如何对 Eloquent 关系中的数据透视表列进行 GROUP 和 SUM?

如何在 laravel 中使用数据透视表中的 3 个关系创建关系?