Php 我如何编写它,使它只访问数据库一次?
这就是我目前拥有的:Php 我如何编写它,使它只访问数据库一次?,php,mysql,laravel,eloquent,fluent,Php,Mysql,Laravel,Eloquent,Fluent,这就是我目前拥有的: $sortOrder = ['0','1','4','2','3']; $cards = ComboCard::where('username', '=', $user->username) ->where('combo_uid', '=', $comboUid) ->select('id', 'card_order') ->orderBy('card_order', 'ASC') ->get(); for(
$sortOrder = ['0','1','4','2','3'];
$cards = ComboCard::where('username', '=', $user->username)
->where('combo_uid', '=', $comboUid)
->select('id', 'card_order')
->orderBy('card_order', 'ASC')
->get();
for($i=0; $i<count($cards); $i++) { // currently hits the database n times based on count($cards)
$index = $sortOrder[$i];
$cards[$index]->card_order = $i;
$cards[$index]->save();
}
$sortOrder=['0'、'1'、'4'、'2'、'3'];
$cards=ComboCard::其中('username','=',$user->username)
->其中('combo_uid','=',$comboUid)
->选择('id'、'card\u order')
->订购人('card\u order','ASC')
->get();
对于($i=0;$icard\u订单=$i;
$cards[$index]->save();
}
如果要更新单个语句,则需要case
这就是说,您不会使用雄辩的,而是使用原始连接更新
(如果该数组中的值是卡顺序
,我将使用ID
):
$cases=$bindings=[];
foreach($sortOrder as$new=>$previous){
$cases[]=“什么时候?然后?”;
$bindings[]=$previous;
$bindings[]=$new;
}
//where in子句的占位符:?,?,?,?,。。。
$placeholders=内爆(“,”,数组填充(0,计数($sortOrder),“?”);
//where in子句的绑定
$bindings=array\u merge($bindings,$sortOrder);
$sql='update`cards`set`card\u order`=case`card\u order`。内爆(''.$cases)。'end'。
'其中,'card_order'位于('.$placeholder.');
数据库::更新($sql,$bindings);