从多个表中获取数据 Laravel

Posted

技术标签:

【中文标题】从多个表中获取数据 Laravel【英文标题】:Get Data from Multiple Tables Laravel 【发布时间】:2016-06-24 14:46:52 【问题描述】:

我正在尝试在 Laravel 中建立一个优惠券网站。每个商家都有自己的优惠/优惠券。我已经能够在特定页面上为商家打印交易/优惠券。

这是我的查询

$deals = DB::table('deals')
    -> join ('merchants', 'deals.merchant_id', '=', 'merchants.merchant_id')
    -> where ('merchant_url_text', $merchant_url_text)
    -> get();

到目前为止一切顺利。

现在开始变得复杂了。

每笔交易还有 2 件与之关联。与交易相关的点击计数和投票。

点击计数位于一个名为 clicks 的表中,该表记录了网站上的每次点击。点击记录将有一个与之关联的点击 ID。所以我需要计算每笔交易获得的点击次数。

第二部分是选票。围绕交易的投票存储在deal_votes 表中。 deal_votes 表有 deal_idvote10

如何结合点击计数和交易投票以在同一个查询中返回,以便在我的视图中显示信息?

【问题讨论】:

【参考方案1】:

您是否为商家、交易、优惠券和点击设置了模型和关系?如果您使用具有关系的 Eloquent 模型,这很简单,文档在这里:https://laravel.com/docs/5.2/eloquent-relationships

这看起来像:

$merchant = Merchant::where('merchant_url_text', $merchant_url_text)
  ->with('deals','deals.votes','deals.clicks')
  ->first();

with() 函数将所有嵌套信息(即查询 joins)添加到单个查询中。

在你看来:

@foreach($merchant->deals as $deal)

   Deal: $deal->name

   Clicks: count($deal->clicks)

   Votes: $deal->votes->sum('vote')

@endforeach

【讨论】:

太棒了。这解决了问题。但是,这种方法不会涉及向视图发送大量数据,尤其是在交易有 10,000 票的情况下。如果每笔交易的投票和点击量很大并且假设我们为商家至少有 100 笔交易,这会对性能产生影响吗? 3 个选项 - 1 是将所有数据发送到您的视图。 2 是创建一个自定义的voteCount 属性,如下所示:softonsofa.com/…。尽管在您的情况下,这确实会导致 100 个数据库查询。第三种选择是运行单独的查询以(一次)获取所有交易的投票计数,然后将该数据单独发送到您的视图。 太棒了。谢谢您的答复。真的很有帮助。

以上是关于从多个表中获取数据 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何从具有关系的 3 个表中获取数据

Laravel 5.2 Eloquent ORM 从 3 个表中获取数据

多个 Laravel Eloquent 关系未显示来自所有关系的数据

使用 laravel 模型获取数据时没有从表中获取结果

Laravel 从关系表中获取数据

Laravel 雄辩模型如何从关系表中获取数据