Laravel Eloquent::Find() 返回具有现有 ID 的 NULL

Posted

技术标签:

【中文标题】Laravel Eloquent::Find() 返回具有现有 ID 的 NULL【英文标题】:Laravel Eloquent::Find() returning NULL with an existing ID 【发布时间】:2014-11-26 04:57:06 【问题描述】:

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

有一个名为Site的模型

我正在使用 Eloquent ORM,所以当我调用(在控制器中)时

$oSite = Site::find(1)

然后

var_dump($oSite);

它返回一个值NULL

但是当我检查数据库时,表'sites'实际上包含以下项目:

id: 1
user_id: 1
name: test

在我的Site model我有以下代码:

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 ...)。

修复:

    将“deleted_at”列设为可为空。

    将所有错误的“deleted_at”时间戳设置为NULL

【问题讨论】:

显示模型和控制器方法。 @JarekTkaczyk 编辑了帖子并添加了 Contoller 方法。模型“站点”在上面。 @JarekTkaczyk 自行解决。问题来源与数据库有关。 【参考方案1】:

你没有退回你的模型。

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

改为这样做:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

是的,在 var_dumping Input::get('siteId') 之后我得到了正确的值。 您是否在 var_dump 中获取整数值? link 请查看此链接 检查了链接。不, Input::get('siteId') 返回一个字符串,而不是 intval 是的,它现在正在工作,但不是因为类型更改。现在 Site::find($iSiteToDelete) 正在工作,即使 $iSiteToDelete 实际上是一个字符串。发生了什么?我真的不知道。

以上是关于Laravel Eloquent::Find() 返回具有现有 ID 的 NULL的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent::Find() 返回具有现有 ID 的 NULL

laravel 判断 改了哪个定位

使用 laravel 安装程序创建 laravel 项目

Laravel:laravel 可翻译插件

win 怎么laravel命令

laravel 安装失败