2016-03-04 85 views
1

我從數據庫中的表中檢索所有行,以便將它們顯示在數據表的客戶端中,並使用數據和相應的操作。這是不相關的,但我使用laravel。這是我在做什麼:在foreach循環中取消設置多維數組

$allItems = $model::withTrashed()->get(); 
$allRows = array(); 
foreach ($allItems as $item) { 

     $allRows[] = array(
      $item->id, 
      $item->name, 
      $item->category->name, 
      $item->url, 
      strftime('%d-%m-%Y %H:%M', $item->updated), 
      'actions' => array(
       'view' => array(
        'href' => $this->_mainTable. '/view/' .$item->id, 
       ), 
       'delete' => array(
        'href' => $this->_mainTable. '/delete/' .$item->id, 
        'modal' => array(
         'question' => 'Delete job:', 
         'name' => $item->name. '?', 
         'advice_phrase' => '', 
         'btn_confirm' => 'Delete', 
         'class_phrase' => '', 
        ), 
       ), 
      ), 
     ); 

     if($item->trashed()) { 
      unset(end($allRows)['actions']['delete']); 
      dd(end($allRows)['actions']); 
     } 
} 

它不給我任何錯誤,並在var_dum() - >(dd(end($allRows)['actions'])),裏面如果它仍然顯示的刪除操作。我不明白爲什麼這不起作用。

+0

你能告訴你在'$ allItems'得到什麼,你所使用的laravel的版本? –

+0

'$ allItems'是從表格中檢索到的行,包括軟刪除的行,它工作正常。我認爲這個問題並不嚴重,條件正常,沒有解決。我正在使用laravel 5.2。 – Miguel

+0

'unset(end($ allRows)['actions'] ['delete']);'將其更改爲 '$ lastRow = end($ allRows)unset($ lastRow ['actions'] ['delete']) ;' –

回答

1

請嘗試這樣。

$allItems = $model::withTrashed()->get(); 
$allRows = array(); 
foreach ($allItems as $item) { 
    $delete = array(); 
    if (!$item->trashed()) { 
     $delete = array(
      'action_table' => $this->_mainTable, 
      'href' => $this->_mainTable . '/view/' . $item->id, 
      'modal' => array(
       'question' => 'Delete job:', 
       'name' => $item->name . '?', 
       'advice_phrase' => '', 
       'btn_confirm' => 'Delete', 
       'class_phrase' => '', 
      ), 
     ); 
    } 

    $allRows[] = array(
     $item->id, 
     $item->name, 
     $item->category->name, 
     $item->url, 
     strftime('%d-%m-%Y %H:%M', $item->updated), 
     'actions' => array(
      'view' => array(
       'action_table' => $this->_mainTable, 
       'href' => $this->_mainTable . '/view/' . $item->id, 
      ), 
      'delete' => $delete, 
     ), 
    ); 
} 
+0

我知道幾種方法來實現這一點,我只是想知道爲什麼這種方式不工作。這個Anwser不會工作,因爲它在刪除操作上給出了* undefined index href *。 – Miguel

0

讓我們來看看我是否理解。你想只顯示操作視圖?如果是這樣,請不要將操作刪除添加到數組$ allItems。

+0

一些行有刪除行爲,只是行'soft deleted'('$ item-> trashed()',它返回一個bool)沒有 – Miguel

+0

嘗試看看哪些項目已被臨時刪除 'echo $ item-> trashed();' 也許Laravel不「知道」認出。 我看不到代碼中的錯誤,所以我認爲這將是框架。 –

+0

我已經找到解決方案了,我發佈了我的anwser。謝謝 – Miguel

0

這個作用似乎是多餘的,我已經能夠實現這一目標:

$allItems = $model::withTrashed()->get(); 
$allRows = array(); 
foreach ($allItems as $key => $item) { 

    $allRows[] = array(
     $item->id, 
     $item->name, 
     $item->category->name, 
     $item->url, 
     strftime('%d-%m-%Y %H:%M', $item->updated), 
     'actions' => array(
      'view' => array(
       'href' => $this->_mainTable. '/view/' .$item->id, 
      ), 
      'delete' => array(
       'href' => $this->_mainTable. '/delete/' .$item->id, 
       'modal' => array(
        'question' => 'Delete job:', 
        'name' => $item->name. '?', 
        'advice_phrase' => '', 
        'btn_confirm' => 'Delete', 
        'class_phrase' => '', 
       ), 
      ), 
     ), 
    ); 

    if($item->trashed()) { 
     unset($allRows[$key]['actions']['delete']); 
     dd(end($allRows)['actions']); 
    } 
}