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

Laravel Eloquent::Find() returning NULL with an existing ID(Laravel Eloquent::Find() 使用现有 ID 返回 NULL)
本文介绍了Laravel Eloquent::Find() 使用现有 ID 返回 NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

It's pretty straightforward as it's the most basic thing but I don't know what I'm missing:

有一个名为 Site

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

I'm using Eloquent ORM, so when I call (in a controller)

$oSite = Site::find(1)

然后

var_dump($oSite);

它返回一个 NULL 的值.

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

But when I check the database, the table 'sites' actually contains the following item:

id: 1
user_id: 1
name: test

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

In my Site model I have the following code:

use IlluminateDatabaseEloquentModelNotFoundException;

 Class Site extends Eloquent {

        protected $table = 'sites';

        protected $fillable = ['user_id', 'name'];
 }

相反,如果我使用以下内容收集项目:

Instead, if I gather the item with the following:

$oSite = DB::table('sites')
                ->where('id', 1)
                ->first();

它有效并且我得到了正确的寄存器.

It works and I get the correct register.

我做错了什么?我没有得到文档的哪一部分?

What I'm doing wrong? Which part of the documentation I didn't get?

型号代码可以在上面查看.

Model code can be checked above.

控制器:

use IlluminateSupportFacadesRedirect;
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 IlluminateDatabaseEloquentSoftDeletingTrait;
use IlluminateDatabaseEloquentModelNotFoundException;

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

Problem was I added a 'deleted_at' column after I started the project and when I applied migrations, I didn't have softdeleting enabled. Obviously, I did a second error, forgetting to enable 'deleted_at' to be nullable, hence all inserts went had a wrong timestamp (0000-00-00 ...).

修复:

  1. 使deleted_at"列可以为空.

将所有错误的 'deleted_at' 时间戳设置为 NULL.

Set all wrong 'deleted_at' timestamps to NULL.

推荐答案

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

Check you are getting Input::get('siteId') correctly. if you are getting it then try to convert it into integer i.e

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

这篇关于Laravel Eloquent::Find() 使用现有 ID 返回 NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)