我可以不使用foreach来简化这段代码吗?
$userQuestIds = [2,4,45,586,16,2,143,234,654,78,56]; $typeQuests = []; foreach ($userQuestIds as $qId) { $typeQuests[] = Quest::where(['id' => $qId])->first(); }
eufgjt7s1#
如果id是一个主键,最短的方法是:
id
$typeQuests = Quest::find($userQuestIds);
vaqhlq812#
您可以使用whereIn:
whereIn
$typeQuests = Quest::whereIn('id', $userQuestIds)->get();
注意:这种方法对于id以外的列(作为主列)更好。我认为@andriy-Lozynskiy解决方案是最好的方法。
cxfofazt3#
可以对QueryBuilder类使用whereIn()方法
QueryBuilder
whereIn()
$userQuestIds = [2,4,45,586,16,2,143,234,654,78,56]; $typeQuests = Quest::whereIn('id', $userQuestIds)->get();
flmtquvp4#
如果你有一个名为'userQuests'的Quest -〉UserQuest关系,并且有一个表'user_quests',你可以这样得到它们:
$typeQuests = Quest::whereHas('userQuests', function (Builder $query) { $query->where('user_quests.status_id', 1); })->get();
编辑:自从我开始回答你的问题以来,你已经简化了你的问题,只要记住你也有这个选择。
4条答案
按热度按时间eufgjt7s1#
如果
id
是一个主键,最短的方法是:vaqhlq812#
您可以使用
whereIn
:注意:这种方法对于
id
以外的列(作为主列)更好。我认为@andriy-Lozynskiy解决方案是最好的方法。cxfofazt3#
可以对
QueryBuilder
类使用whereIn()
方法flmtquvp4#
如果你有一个名为'userQuests'的Quest -〉UserQuest关系,并且有一个表'user_quests',你可以这样得到它们:
编辑:自从我开始回答你的问题以来,你已经简化了你的问题,只要记住你也有这个选择。