2014-10-01 41 views
8

這是非常簡單的,因爲它是最基礎的東西,但我不知道我錯過了返回NULL:Laravel雄辯:: find()方法與現有的ID

有一個叫做模型Site

我使用的是口才ORM,所以當我打電話(在控制器)

$oSite = Site::find(1) 

然後

var_dump($oSite); 

它返回值NULL

但是,當我檢查數據庫,表中 '網站' 實際上包含以下項目:

id: 1 
user_id: 1 
name: test 

在我Site模式我有以下代碼:

use Illuminate\Database\Eloquent\ModelNotFoundException; 

Class Site extends Eloquent { 

     protected $table = 'sites'; 

     protected $fillable = array ('user_id', 'name'); 
} 

相反,如果我收集以下項目:

$oSite = DB::table('sites') 
       ->where('id', 1) 
       ->first(); 

它的工作原理和我得到正確的註冊。

我在做什麼錯了?我沒有收到哪份文件?

編輯:

型號代碼可以在上面進行檢查。

控制器

use Illuminate\Support\Facades\Redirect; 
class SiteManagementController extends BaseController { 

... 

    public function deleteSite() 
    { 
     if (Request::ajax()) 
     { 
      $iSiteToDelete = Input::get('siteId'); 

      $oSite = Site::find($iSiteToDelete); 

      return var_dump($oSite); 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

編輯2:(解決)

真正原因是行不通的:

我在我的模型代碼有原本如下:

use Illuminate\Database\Eloquent\SoftDeletingTrait; 
use Illuminate\Database\Eloquent\ModelNotFoundException; 

Class Site extends Eloquent { 

    protected $table = 'sites'; 

    use SoftDeletingTrait; 

    protected $dates = ['deleted_at']; 

    protected $fillable = array('user_id', 'name'); 
} 

問題是我在啓動項目後添加了一個'deleted_at'列,當我申請遷移時,我沒有啓用softdeleting。 顯然,我做了第二個錯誤,忘記啓用'deleted_at'爲空,因此所有的插入都有錯誤的時間戳(0000-00-00 ...)。

修復:

  1. 可爲空 'deleted_at' 列。

  2. 將所有錯誤的'deleted_at'時間戳設置爲NULL

+0

顯示模型和控制方法來代替。 – 2014-10-01 11:09:14

+0

@JarekTkaczyk編輯後添加了Contoller方法。模型'網站'在上面。 – zedee 2014-10-01 11:20:26

+0

@JarekTkaczyk自己解決。問題來源與數據庫相關。 – zedee 2014-10-01 13:20:32

回答

1

檢查您是否正確獲得Input::get('siteId')。如果你得到它然後嘗試將其轉換爲整數,例如

$iSiteToDelete = intval(Input::get('siteId')); 
+0

是的,在var_dumping Input :: get('siteId')之後,我得到了正確的值。 – zedee 2014-10-01 11:27:03

+0

你在var_dump中獲得整數值嗎? – 2014-10-01 11:29:12

+0

[鏈接](http://stackoverflow.com/questions/15326140/laravel-eloquent-find-returning-null)請檢查這個鏈接 – 2014-10-01 11:31:39

1

你沒有返回你的模型。

var_dump打印輸出並不返回任何內容。

做到這一點,而不是:

dd($oSite); // stands for var_dump and die - a helper method 

,甚至更好,簡單地返回模型:

return $oSite; // will be cast to JSON string