Eloquent - 保存时的奇怪行为

Eloquent - Strange behavior on save

我正在保存一条记录,然后 return 从数据库中获取值,Eloquent 并不是 return 获取所有值。

示例:

如果我有一个叫 names 的 MySQL table,像这样:

| ID                         | Date                                | Name         |
|----------------------------|-------------------------------------|--------------|
| AUTO INCREMENT PRIMARY KEY | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | VARCHAR(100) |

我有一个名为 Names

的 eloquent 模型

然后我保存并 return 像这样:

function save($sName) {
    $oName = new Names();
    $oName->Name = $sName;

    $oName->save();

    $oReturn = new stdClass();
    $oReturn->Name = $oName->Name;
    $oReturn->Date = $oName->Date;
    return $oReturn;
}

它returns:

echo json_encode(save("Test")); // {"Name": "Test", "Date": null}

这正常吗?

是的,这很正常。 Eloquent 不保存然后再次查询 select 它刚刚插入的记录的所有数据。

您可以手动设置字段 date,只需将此代码添加到您的模式中:

public static function boot()
{
    static::creating(function ($model) {
        $model->date = date('Y-m-d H:i:s');
    });
}

您将避免第二次 DB 请求选择插入的项目。使用 date 函数时请注意时区。

您也可以使用 getAttributes() Eloquent 方法并摆脱 stdClass:

function save($sName)
{
    $oName = new Names();
    $oName->Name = $sName;
    $oName->save();
    return $oName->getAttributes();
}