【发布时间】: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 自行解决。问题来源与数据库有关。
标签: php laravel orm find eloquent