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的主要内容,如果未能解决你的问题,请参考以下文章