Laravel Eloquent :: Find()使用现有ID返回NULL

时间:2014-10-01 11:04:21

标签: php laravel orm find eloquent

它非常简单,因为它是最基本的东西,但我不知道我错过了什么:

拥有一个名为Site

的模型

我使用Eloquent 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 = ['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 = ['user_id', 'name'];
}

问题是我添加了deleted_at'在我启动项目后,当我应用迁移时,我没有启用软删除。 显然,我做了第二个错误,忘记启用' deleted_at'可以为空,因此所有插入都有错误的时间戳(0000-00-00)。

修正:

  1. 制作可空的' deleted_at'列。

  2. 设置所有错误' deleted_at'时间戳到NULL

2 个答案:

答案 0 :(得分:1)

检查您是否正确获得Input::get('siteId')。如果你得到它然后尝试将其转换为整数,即

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

答案 1 :(得分:1)

你没有归还你的模特。

var_dump打印输出并且不返回任何内容。

改为:

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

甚至更好,只需返回模型:

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