2014-10-01 15 views
8

E 'piuttosto semplice in quanto è la cosa più semplice, ma non so che cosa mi manca:laravel Eloquente :: Find() restituire NULL con un ID esistente

Avere un modello chiamato Site

sto utilizzando Eloquente ORM, così quando chiamo (in un controllore)

$oSite = Site::find(1) 

e poi

var_dump($oSite); 

Restituisce il valore NULL.

Ma quando controllo il database, i 'siti' tabella contiene in realtà la seguente voce:

id: 1 
user_id: 1 
name: test 

Nel mio modelloSiteho il seguente codice:

use Illuminate\Database\Eloquent\ModelNotFoundException; 

Class Site extends Eloquent { 

     protected $table = 'sites'; 

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

Invece, se raccolgo l'articolo con il seguente:

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

Funziona e ottengo il registro corretto.

Cosa sto facendo male? Quale parte della documentantion non ho avuto?

EDIT:

Codice modello può essere controllato in precedenza.

controller:

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

EDIT 2: (RISOLTO)

vero motivo per cui non funzionava:

ho avuto originariamente nel mio codice del modello il seguente:

Problema: ho aggiunto una colonna "deleted_at" dopo l'avvio del progetto e quando ho applicato le migrazioni, non avevo abilitato il softdeleting. Ovviamente, ho fatto un secondo errore, dimenticando di abilitare 'deleted_at' come annullabile, quindi tutti gli inserimenti hanno avuto un timestamp errato (0000-00-00 ...).

Fix:

  1. 'deleted_at' colonna made annullabile.

  2. Impostare tutti i timestamp 'deleted_at' su NULL.

+0

Mostra il modello e il metodo di controllo, invece. –

+0

@JarekTkaczyk ha modificato il post e ha aggiunto il metodo Contoller. Modello 'Sito' è sopra. – zedee

+0

@JarekTkaczyk risolto da solo. La fonte del problema era correlata al DB. – zedee

risposta

1

Controlla che stai ricevendo Input::get('siteId') correttamente. se hai trovato è quindi provare a convertirlo in numero intero cioè

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

Sì, dopo var_dumping Input :: get ('siteId') ho ottenuto il valore corretto. – zedee

+0

stai ottenendo un valore intero in var_dump? –

+0

[collegamento] (http://stackoverflow.com/questions/15326140/laravel-eloquent-find-returning-null) si prega di controllare questo collegamento –

1

Non stai tornando il vostro modello.

var_dump stampa l'output e non restituisce nulla.

fare questo, invece:

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

e anche meglio, è sufficiente riportare il modello:

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