【问题标题】:Laravel Complex QueryLaravel 复杂查询
【发布时间】:2017-05-10 04:07:27
【问题描述】:
我是 Laravel 新手,正在构建一个小型 Laravel 5.3 应用程序,提供免费的内容文件以及可供购买的文件。
我希望用户能够自动访问免费文件(可能会定期添加的内容)。
我有一个产品、购买(数据透视)和用户表。
当用户登录时,如何查询 products 表,如下所示:选择所有免费产品 (price=0) 或加入 users.user_id = purchase.user_id 和 products.id = purchase.product_id 的购买?
有什么想法,或者有更好的方法来完成同样的事情吗?
谢谢
【问题讨论】:
标签:
php
sql
laravel
orm
eloquent
【解决方案1】:
如果您使用以下查询怎么样:
$purchasedProducts = DB::table('purchases')
->join('products', 'products.id', '=', 'purchases.product_id')
->select('purchases.*', 'products.*')
->where([
['purchases.user_id', '=', $loggedinUserId],
['products.price', '=', 0],
])
->get();
【解决方案2】:
如果您定义了user 和product 之间的关系,那么您可以使用orWhereHas 查询它:
Product::where('price', 0)
->orWhereHas('users', function ($q) user($user) {
$q->where('user_id', $user->id);
})
->get();
假设你的关系名称是users。