Laravel 复杂查询

Posted

技术标签:

【中文标题】Laravel 复杂查询【英文标题】:Laravel Complex Query 【发布时间】:2017-05-10 04:07:27 【问题描述】:

我是 Laravel 新手,正在构建一个小型 Laravel 5.3 应用程序,提供免费的内容文件以及可供购买的文件。

我希望用户能够自动访问免费文件(可能会定期添加的内容)。

我有一个产品、购买(数据透视)和用户表。

当用户登录时,如何查询 products 表,如下所示:选择所有免费产品 (price=0) 或加入 users.user_id = purchase.user_id 和 products.id = purchase.product_id 的购买?

有什么想法,或者有更好的方法来完成同样的事情吗?

谢谢

【问题讨论】:

【参考方案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】:

如果您定义了userproduct 之间的关系,那么您可以使用orWhereHas 查询它:

Product::where('price', 0)
        ->orWhereHas('users', function ($q) user($user) 
            $q->where('user_id', $user->id);
        )
        ->get();

假设你的关系名称是users

【讨论】:

以上是关于Laravel 复杂查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel Query Builder 进行复杂的 MySQL 内连接查询

Laravel 雄辩的复杂搜索查询问题

使用链式方法的 Laravel 复杂范围查询

laravel-model实现复杂的查询语句

laravel-model实现复杂的查询语句

Laravel通过查询构造器实现复杂的查询语句