mysql - Laravel SQL 查询。帮我

标签 mysql sql laravel

我有一个名为“Offers”的表,其中包含 3 种(公共(public)、请求、私有(private))类型的数据。现在我想直接向用户终端公众展示并请求报价。私有(private)优惠不会显示,但当管理员将在新表 (offer_access) 中添加 user_id 和 offer_id 时,私有(private)优惠应该仅对这些用户可用。

$offer = Offer::where('status', 'public')->orWhere('status', 'request')->latest()->get();

我写了这篇文章,并为用户端获得了公开和私有(private)报价。现在我想在“OfferAccess”表上可用时向用户显示私有(private)优惠。

那么现在,我该如何编写 SQL 查询呢?

最佳答案

你可以试试吹:

$offer = Offer::whereIn('status', ['public', 'request'])
        ->orWhere(function($query) {
            $query->where('status', 'private')
            ->whereHas('OfferAccess', function($qry) {
                $qry->where('user_id', auth()->user()->id);
            });
        })->get();

如果您只需要最新的结果可以使用->latest()->get() 而不是只使用->get()。 此外,如果您需要为当前登录用户以外的任何其他用户获取它,则需要将 user_id 传递给闭包函数。所以你需要使用更新的 orWhere 就像:

->orWhere(function($query) use ($user_id) {
            $query->where('status', 'private')
            ->whereHas('OfferAccess', function($qry) use ($user_id) {
                $qry->where('user_id', $user_id);
            });
        })

它应该会给你想要的结果。

关于mysql - Laravel SQL 查询。帮我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59009937/

相关文章:

database - 如何在 Laravel 5.6 中使用 get Route 而不是 id 创建动态 url

php - 模型工厂与现有模型的关联

mysql - SQL查询没有得到正确的支付方式

mysql - 无法在 MySql 中将 varchar 转换为 datetime

sql - 从 prestodb 中选择多个列的不同列

java - 如何使用 Java Access MS Access 查询(不是普通表)?

php - Laravel Eloquent : keeping all interactions with a model in sync in two different databases

mysql - 查找一支球队最近 X 场比赛的胜/平/负百分比

mysql - 在 LIMIT 1 的查询中使用依赖查询是一个错误的操作吗?

php - 需要更改 MySQL 数据库中的值,但 SQL 语言遇到问题