gpt4 book ai didi

php - 在 Laravel 中分页之前获取所有结果 id

转载 作者:行者123 更新时间:2023-12-02 19:42:41 24 4
gpt4 key购买 nike

这是我的代码:

$prestations = Prestation::with([
'service' => function($query) {
$query->select(['id','name']);
},
'facility' => function($query) {
$query->select(['id','name']);
},
'conciergeries.network' => function($query) {
$query->select(['id','name']);
}
])
->whereHas('service', function ($query) use ($sService) {
$query->where('name', 'regexp', "/$sService/i");
})
->whereHas('facility', function ($query) use ($sPartner) {
$query->where('name', 'regexp', "/$sPartner/i");
})
->whereHas('conciergeries.network', function ($query) use ($sSubsidiary) {
$query->where('name', 'regexp', "/$sSubsidiary/i");
})
->options([
'collation' => [
'locale' => 'en_US',
'strength' => 1
]
])
->where('name', 'regexp', "/$search/i")
->orderBy($orderBy, $orderDirection)
->paginate(25);

当我尝试获取所有 ID 时:

$arrIds = [];

foreach ($prestations as $prestation) {
array_push($arrIds, $prestation->_id);
}

问题是我只获得分页的 25 个元素的 id。如何获取所有结果的 id?

最佳答案

您可以将查询保存在 $prestationsQuery 变量上并调用它 2 次,如下所示:

$prestationsQuery = Prestation::with([
'service:id,name',
'facility:id,name',
'conciergeries.network' => function($query) {
$query->select(['id','name']);
}
])
->whereHas('service', function ($query) use ($sService) {
$query->where('name', 'regexp', "/$sService/i");
})
->whereHas('facility', function ($query) use ($sPartner) {
$query->where('name', 'regexp', "/$sPartner/i");
})
->whereHas('conciergeries.network', function ($query) use ($sSubsidiary) {
$query->where('name', 'regexp', "/$sSubsidiary/i");
})
->options([
'collation' => [
'locale' => 'en_US',
'strength' => 1
]
])
->where('name', 'regexp', "/$search/i")
->orderBy($orderBy, $orderDirection);

$arrIds = $prestationsQuery->pluck('_id');

$prestations = $prestationsQuery->paginate(25);

记住在pluck之后调用paginate

另一种方法是使用 tap 函数,如下所示:

$arrIds = [];

$prestations = Prestation::with([
'service:id,name',
'facility:id,name',
'conciergeries.network' => function($query) {
$query->select(['id','name']);
}
])
->whereHas('service', function ($query) use ($sService) {
$query->where('name', 'regexp', "/$sService/i");
})
->whereHas('facility', function ($query) use ($sPartner) {
$query->where('name', 'regexp', "/$sPartner/i");
})
->whereHas('conciergeries.network', function ($query) use ($sSubsidiary) {
$query->where('name', 'regexp', "/$sSubsidiary/i");
})
->options([
'collation' => [
'locale' => 'en_US',
'strength' => 1
]
])
->where('name', 'regexp', "/$search/i")
->orderBy($orderBy, $orderDirection);
->tap(function ($query) use (&$arrIds) {
$arrIds = $query->pluck('_id');
})
->paginate(25);

关于php - 在 Laravel 中分页之前获取所有结果 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59862235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com