如何在laravel5(数组)中删除这些项目?

时间:2015-06-19 09:05:29

标签: php laravel

我试图删除我在foreach中正确收到的项目:

 public function prueba(){
        $detallcomanda = Comanda::where('idusuari','=',14)->where('estat','=',0)->get();
        if(count($detallcomanda)>0){
            foreach($detallcomanda as $detall){
                 echo $detall->id;
            }
        }
    }

我正确显示了id,但是当我尝试使用foreach中的这个表单删除时,laravel返回。

糟糕,看起来出了问题。

$detall->delete($detall->id)

更新

当我尝试这个时,我正确地接收了内容,但是当我使用Comanda :: destroy时,laravel5没有做任何事情。

 public function prueba(){
        $comanda = Comanda::where('idusuari','=',1)->where('estat','=',0)->get();
        $toDelete = array();
        foreach($comanda as $detall){
            $toDelete[] = $detall->id;
        }
        var_dump($toDelete);

    }

这是数组

array(5) { [0]=> int(41) [1]=> int(42) [2]=> int(43) [3]=> int(44) [4]=> int(45) }

当我使用以下代码时,destroy不起作用。

Comanda :: destroy($ toDelte)

Update2

我这样做

$prueba = json_encode($toDelete);
var_dump($prueba);

我正确地接受了id,但是现在我需要使用explode来退出这个项目“[]”,只获取数字我不知道它是如何工作在laravel爆炸或是相同的?

string(7) "[38,41]"
Comanda::destroy([10, 14]);

3 个答案:

答案 0 :(得分:0)

您不希望在这样的循环中单独删除它们。这意味着您要为每个要删除的项目运行一个查询。而是将所有ID收集到一个数组中,并在一个查询中将它们全部删除:

public function prueba(){
    $detallcomanda = Comanda::where('idusuari','=',14)->where('estat','=',0)->get();
    $toDelete = array();
    if(count($detallcomanda)>0){
        foreach($detallcomanda as $detall){
             $toDelete[] = $detall->id;
        }
        Comanda::destroy($toDelete);
    }
}

答案 1 :(得分:0)

delete()不需要任何参数。您已经在模型上调用该函数。试试这个:

$detall->delete();

但正如已经指出的那样,这是非常低效的。只有在具有应由删除触发的模型事件时才应该这样做。否则最快的方法是:

Comanda::where('idusuari','=',14)->where('estat','=',0)->delete();

答案 2 :(得分:0)

如果您查询模型,则会获得一个集合。集合有一种检索模型键的方法。您可以使用此方法获取返回模型的键,并将其传递给Eloquent的b*11方法,以便一次性删除它们:

destroy

这意味着你不必做任何可怕的循环来构建临时数组只是为了收集模型键 - 有一种方法可以帮助你。