Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我如何编写它,使它只访问数据库一次?_Php_Mysql_Laravel_Eloquent_Fluent - Fatal编程技术网

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