从多个表中获取数据 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_id
、vote
(1
或 0
)
如何结合点击计数和交易投票以在同一个查询中返回,以便在我的视图中显示信息?
【问题讨论】:
【参考方案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()
函数将所有嵌套信息(即查询 join
s)添加到单个查询中。
在你看来:
@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 5.2 Eloquent ORM 从 3 个表中获取数据