为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃无极 2021-11-05 13:13:45
我有两个变量 id 和 distance 的 session Array,我想显示 DB 中的所有商店,其中 session 中的 ids 等于商店中的 ids 我还想显示每个商店的距离以及商店详细信息,请注意,我是 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();
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

$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;


查看完整回答
反对 回复 2021-11-05
?
慕后森

TA贡献1802条经验 获得超5个赞

您可以使用whereIn()查询构建器中的函数来使用数据数组进行过滤。


$stores = StoreInfo::whereIn(

              'id', 

              collect(session('storeinfo'))->map->id->toArray()

          )

          ->get()

          ->map(function($storeDetail) {

              //find the matching storeinfo from session.

              $storeInfo = collect(session('storeinfo'))

                               ->firstWhere('id', $storeDetail->id);

              // set distance

              return $storeDetail->distance = $storeInfo['distance'];

          });


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信