雄辩的查询单独工作,但在子查询中不能一起工作

时间:2019-03-06 15:26:47

标签: php eloquent

我正在尝试使用Eloquent的子查询来获取一些数据,但是dd ing不返回任何内容。另外

    $discountArticles = $discountTableItemIdIn
            ->where('recipient_type', '=', 'article')
            ->toArray();

或这个

    $discountArticles = $discountTableItemIdIn
            ->where('recipient_id', '=', $articleId)
            ->toArray();

做得好。

但是,当我尝试这样的操作时,它会失败(或者什么也不返回):

    $discountArticles = $discountTableItemIdIn->where(function ($subQuery) {
        $subQuery
            ->where('recipient_type', '=', 'article')
            ->where('recipient_id', '=', $articleId);
    })->toArray();

我知道我可以在同一个集合上进行单独的查询,并执行array_merge,但是我想让这种方式起作用。不知道发生了什么。

1 个答案:

答案 0 :(得分:1)

那么$discountTableItemIdIn是整个表的集合吗?这意味着您将需要不同的功能,因为集合上的->where()逻辑与其在生成器(雄辩的)实例上的工作方式不同。

尝试使用filter()

$discountArticles = $discountTableItemIdIn->filter(function ($item) use($articleId) {
    return $item->recipient_type == "article" && $item->recipient_id == $articleId;
})->toArray();

这将为您的$discountTableItemIdIn集合过滤类型为articlerecipient_id包含$articleId的记录<script> function first(){ $('#videoObj').remove(); $('<iframe id="videoObj" width="1280 " height="720" src="http://www.mysiteetisym.com/videos/KidsOnTrampoline.mp4" frameborder="0" allowfullscreen></iframe>').prependTo('#vholder'); } function second(){ $('#videoObj').remove(); $('<iframe id="videoObj" width="1280" height="720" src="http://www.mysiteetisym.com/videos/WaterFight.mp4" frameborder="0" allowfullscreen></iframe>').prependTo('#vholder'); } function third(){ $('#videoObj').remove(); $('<iframe id="videoObj" width="1280 " height="720" src="http://www.mysiteetisym.com/videos/FourWheelingRace.mp4" frameborder="0" allowfullscreen></iframe>').prependTo('#vholder'); } function fourth(){ $('#videoObj').remove(); $('<iframe id="videoObj" width="1280 " height="720" src="http://www.mysiteetisym.com/videos/CookingWithDebbie.mp4" frameborder="0" allowfullscreen></iframe>').prependTo('#vholder'); } </script> 的记录,返回一个新集合并转换到一个数组。

请注意,这效率很低;您应该避免将整个表加载到集合中,而只是使用问题中的子查询逻辑直接查询表。