Php Laravel,如何在控制器中获取会话数组并与模型进行比较

Php Laravel,如何在控制器中获取会话数组并与模型进行比较,php,laravel,Php,Laravel,我有两个变量的会话数组,id和distance,我想显示DB中的所有存储,其中会话中的id等于存储中的id,我还想显示每个存储的距离以及存储详细信息,请注意,我是laravel的新手,谢谢 dd(session('storeinfo')); array:252 [▼ 0 => array:2 [▼ "id" => 76 "distance" => "3.23" ] 1 => array:2 [▼ "id

我有两个变量的会话数组,id和distance,我想显示DB中的所有存储,其中会话中的id等于存储中的id,我还想显示每个存储的距离以及存储详细信息,请注意,我是laravel的新手,谢谢

dd(session('storeinfo'));

 array:252 [▼
    0 => array:2 [▼
      "id" => 76
     "distance" => "3.23"
          ]
    1 => array:2 [▼
    "id" => 77
    "distance" => "7.09"
]
存储在数据库中:

 $stores = Storeinfo::all();
$stores=[];
$storeInfos=会话('storeinfo');
usort($storeInfos,function($a,$b){
如果(!isset($a['distance']){return-1;}
如果(!isset($b['distance']){return 1;}
如果($a['distance']=$b['distance']){
返回0;
}
回报($a['distance']<$b['distance'])?-1:1;
});
foreach($storeInfo作为$storeInfo){
$store=store::find($storeInfo['id']);
如果($store){
$store->distance=$storeInfo['distance'];
$stores[]=$store;
}
}
退回$10的店铺;
您可以使用查询生成器中的
where()
函数使用数据数组进行过滤

$stores=StoreInfo::其中(
“id”,
收集(会话('storeinfo'))->map->id->toArray()
)
->得到()
->地图(功能($storeDetail){
//从会话中查找匹配的storeinfo。
$storeInfo=collect(会话('storeInfo'))
->firstWhere('id',$storeDetail->id);
//设定距离
返回$storeDetail->distance=$storeInfo['distance'];
});

这很好,但是如何按距离对结果排序?非常感谢,请帮助我如何按距离排序并在中生成结果pagination@AsH我已经编辑了我的答案,添加了一个按距离排序的选项,以便对您的问题获得一个好的答案,请包括您已经尝试过的内容,即使它已完全关闭。传递给Illumb\Support\Collection::map()的参数1必须是可调用的、给定字符串的、在中调用的
$stores = [];
$storeInfos = session('storeinfo');
usort($storeInfos, function($a, $b) {
    if (!isset($a['distance'])) {return -1;}
    if (!isset($b['distance'])) {return 1;}
    if ($a['distance'] == $b['distance']) {
        return 0;
    }
    return ($a['distance'] < $b['distance']) ? -1 : 1;
});
foreach ($storeInfos as $storeInfo) {
    $store = Store::find($storeInfo['id']);
    if ($store) {
        $store->distance = $storeInfo['distance'];
        $stores[] = $store;
    }
}
return $stores;