2014-10-01 17 views
8

Jest to dość proste, jak jest to najbardziej podstawowa rzecz, ale nie wiem, co mi brakuje:laravel Eloquent :: find() NULL powrocie z istniejącym ID

Mając model o nazwie Site

Używam wymowny ORM, więc kiedy zadzwonić (w sterowniku)

$oSite = Site::find(1) 

a następnie

var_dump($oSite); 

Zwraca wartość NULL.

Ale kiedy sprawdzić w bazie danych, w tabeli 'obiekty' faktycznie zawiera następujący element:

id: 1 
user_id: 1 
name: test 

W moim Sitemodelu Mam następujący kod:

use Illuminate\Database\Eloquent\ModelNotFoundException; 

Class Site extends Eloquent { 

     protected $table = 'sites'; 

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

Zamiast jeśli zbieram przedmiot z następującą pozycją:

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

Działa i otrzymuję prawidłowy rejestr.

Co robię źle? Której części dokumentacji nie dostałem?

EDIT:

kod modelu można sprawdzić powyżej.

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: (SOLVED)

prawdziwy powód dlaczego nie działa:

miałem pierwotnie w kodzie modelu następujące:

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

Po dodaniu kolumny "deleted_at" po uruchomieniu projektu i po zastosowaniu migracji nie włączono funkcji miękkiego wybierania. Oczywiście popełniłem drugi błąd, zapominając o włączeniu "deleted_at", aby uzyskać zerowalność, dlatego wszystkie wkładki miały nieprawidłowy znacznik czasu (0000-00-00 ...).

Fix:

  1. Wykonane pustych 'deleted_at' kolumna.

  2. Ustaw wszystkie błędne znaczniki czasu "deleted_at" na NULL.

+0

Pokaż modelu i metody zamiast kontrolera. –

+0

@JarekTkaczyk zredagował post i dodał metodę Contoller. Model "Strona" jest powyżej. – zedee

+0

@JarekTkaczyk rozwiązany przez siebie. Źródłem problemu było powiązanie z bazą danych. – zedee

Odpowiedz

1

Sprawdź, czy prawidłowo pobierasz Input::get('siteId'). jeśli otrzymujesz go, spróbuj przekonwertować go na liczbę całkowitą, np.

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

Tak, po var_dumping Input :: get ('siteId') Mam poprawną wartość. – zedee

+0

Czy otrzymujesz wartość całkowitą w zmiennej var_dump? –

+0

[link] (http://stackoverflow.com/questions/15326140/laravel-eloquent-find-returning-null) proszę sprawdzić ten link –

1

Nie zwrócisz swojego modelu.

var_dump drukuje dane wyjściowe i nic nie zwraca.

to zrobić w zamian:

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

a nawet lepiej, po prostu wrócić model:

return $oSite; // will be cast to JSON string 
Powiązane problemy