2014-07-26 81 views
0

概述:Laravel 4 - 發送數據控制器查看

我有這樣的方法getDailyTimeRecordEntry()

public function getDailyTimeRecordEntry($record_id = false) { 

    $user_id = Auth::user()->id; 

    $dtr = DailyTimeRecord::where('id', '=', $record_id) 
      ->where('user_id', '=', $user_id); 

    if ($dtr->count() > 0) { 
     $dtr = $dtr->first(); 
    } else if ($dtr->count() == 0 && $record_id != false) { 

     // If other user accessing someone's record id, will redirect 
     return Redirect::route('dashboard-shinra') 
       ->with('failure', 'The hell are you accessing someone\'s record?'); 
    } 

    // if the dtr->count() is 0 or has a value it still send the data to view 
    return View::make('dashboard.shinra.dtr_entry') 
      ->with('dtr', $dtr); 
} 

因此,我們知道該URL是否有記錄ID或空白的參數,它仍然發該dtr值,我通過查看

無參數: www.mydomain.com/dashboard/shinra/daily-time-record-entry

隨着參數: www.mydomain.com/dashboard/shinra/daily-time-record-entry/2

所以在視圖dashboard.shinra.dtr_entry

我的代碼本的某些線,其具有dtr變量在它。

<input type="text" name="date" value="{{ ($dtr->date) ? $dtr->date : '' }}"> 

所以,如果我們訪問

www.mydomain.com/dashboard/shinra/daily-time-record-entry/1

中的所有記錄將在像上面的輸入文本字段輸出。因爲參數1在數據庫中有記錄。

所以,如果我訪問

www.mydomain.com/dashboard/shinra/daily-time-record-entry

如果不帶參數,我遇到的錯誤

enter image description here

我知道這是因爲這樣一個

{{ ($dtr->date) ? $dtr->date : '' }} 

但是,ar有沒有解決這個問題?

我甚至嘗試

{{ (isset($dtr->date)) ? $dtr->date : '' }} 

而且仍然無法正常工作。

+0

,您在數據庫中,如果沒有參數得到任何結果回來設置? – MikeWu

回答

1

的問題是邊緣的情況下,當計數爲0,你永遠不執行查詢。

首先,我會建議適當命名變量:

$query = DailyTimeRecord::where('id', '=', $record_id) 
     ->where('user_id', '=', $user_id); 
... 

$dtr = $query->first(); // or whatever 
... 
return View::make()->with('dtr', $dtr); 

那麼你就已經知道了,那$dtr沒有設置,所以它是很容易調試。

現在,你的代碼執行的查詢,這是沒有必要的:

// 1st query 
if ($dtr->count() > 0) { 
// 2nd query if passed 
    $dtr = $dtr->first(); 

// 2nd query if didn't pass 
} else if ($dtr->count() == 0 && $record_id != false) { 

雖然你可以做得一樣簡單,因爲這:

$dtr = DailyTimeRecord::where('id', '=', $record_id) 
     ->where('user_id', '=', $user_id) 
     ->first(); 

if (! count($dtr)) 
{ 
    return ... // ERROR 
} 

return ... // correct row returned 
0

對我來說,如果你沒有設置參數,那麼id就是0.這意味着你在你的$ dtr中獲得了一個空集合,並將這個空集合傳遞給視圖。比你試圖訪問你所想的屬性是模型,但實際上它是一個集合。

當沒有參數傳遞給控制器​​動作時,這可能不是基於你的數據庫返回的情況。

1

在您的方法getDailyTimeRecordEntry()中,當$record_idfalse時,您還應該處理案例($dtr->count() == 0 && $record_id == false)。否則,您可能遇到這樣的情況:您不需要get()first()$dtr查詢。

所以,你應該有:

public function getDailyTimeRecordEntry($record_id = false) { 

    $user_id = Auth::user()->id; 

    $dtr = DailyTimeRecord::where('id', '=', $record_id) 
      ->where('user_id', '=', $user_id); 

    if ($dtr->count() > 0) { 
     $dtr = $dtr->first(); 
    } else if ($dtr->count() == 0 && $record_id != false) { 

     // If other user accessing someone's record id, will redirect 
     return Redirect::route('dashboard-shinra') 
       ->with('failure', 'The hell are you accessing someone\'s record?'); 
    } else { 
     // return something or make sure you do $dtr = $dtr->first() here 
     $dtr = $dtr->first(); 
    } 

    // if the dtr->count() is 0 or has a value it still send the data to view 
    return View::make('dashboard.shinra.dtr_entry') 
      ->with('dtr', $dtr); 
} 

此外,您還可以使用簡單的語法在刀片三元運算符。而不是寫

{{ (isset($dtr->date)) ? $dtr->date : '' }} 

的,你可以寫

{{ $dtr->date or '' }} 
相關問題