使用Laravel Eloquent查询Where子句

时间:2017-01-20 13:11:26

标签: php sql laravel-5.3

我正在使这段代码正常工作aapt dump badging mobile_app.apk aapt dump badging wear_app.apk 已更改为以下代码,以便更灵活,更了解我想要做的事情:

$sector = Sector::where('ref_id', $sectorId)->with('offers.provider')->first();

所以我们在这里$sector = Sector::where('ref_id', '$sectorId') ->with( [ 'offers' => function($query) { $query->with( [ 'provider' => function($query) { $query->select('name'); } ] ); } ] ) ->first(); sector指向此offers,并在每个sector下,我们正在接收链接的offer。现在,provider的{​​{1}}为providersstatus。因此,根据我上面的代码,是否有办法只检索0 1,其状态为offers

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您是否尝试在提供程序查询中添加where子句以仅提取状态为1?

的提供程序
'provider' => function($query) {
    $query->select('name')->where('status', 1);
}

编辑:我不是Laravel的专家,但也许我遇到问题的一个例子可能会对你的问题有所了解:

$dealer = $this->dealer->where('foreign_dealer_id', $dealerIdInFeed)
            ->where(function ($subQuery) use ($accountTypes) {
                if(count($accountTypes) > 1)
                {
                    foreach($accountTypes as $accountType)
                    {
                        $subQuery->orWhere('account_type', $accountType);
                    }
                }
                else
                {
                    $subQuery->orWhere('account_type', $accountTypes);
                }
            })
            ->first();

答案 1 :(得分:0)

您可以使用whereHas - 专门设计用于此类方案。文档中的示例:

  

如果您需要更多功能,可以使用whereHas和orWhereHas方法将“where”条件放在您的查询上。这些方法允许您向关系约束添加自定义约束,例如检查注释的内容:

// Retrieve all posts with at least one comment containing words like foo%
$posts = Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
})->get();

不要让代码片段欺骗你,它会在closure内完全正常工作。