2014-10-01 4 views
8

Это довольно просто, как это самое основное, но я не знаю, что я пропускаю:Laravel Eloquent :: Find() возвращают NULL с существующим ID

Имея модель под названием Site

Я использую Красноречивый ОРМ, поэтому, когда я называю (в контроллере)

$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(); 

Он работает, и я получаю правильный регистр.

Что я делаю неправильно? Какую часть документации я не получил?

EDIT:

код модели может быть проверено выше.

Контроллер:

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: (решаемые)

Реальная причина, почему не работает:

Я имел первоначально в моей модели кода следующие:

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' как nullable, поэтому у всех вставленных входов была неправильная метка времени (0000-00-00 ...).

Fix:

  1. Сделано обнуляемым колонка 'deleted_at'.

  2. Установить все неправильные 'deleted_at' отметки времени до NULL.

+0

Показать модель и метод контроллера вместо. –

+0

@JarekTkaczyk отредактировал сообщение и добавил метод Contoller. Модель «Сайт» выше. – zedee

+0

@JarekTkaczyk решается самостоятельно. Источником проблемы был связанный с БД. – zedee

ответ

1

Проверьте правильность ввода данных Input::get('siteId'). если вы получаете его, попробуйте преобразовать его в целое i.e

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

Да, после var_dumping Вход :: get ('siteId') Я получил правильное значение. – zedee

+0

Вы получаете целочисленное значение в var_dump? –

+0

[ссылка] (http://stackoverflow.com/questions/15326140/laravel-eloquent-find-returning-null) проверьте эту ссылку –

1

Вы не возвращаете свою модель.

var_dump печатает вывод и ничего не возвращает.

сделать это вместо того, чтобы:

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

и даже лучше, просто вернуть модель:

return $oSite; // will be cast to JSON string 
Смежные вопросы