雄辩 - 保存时的奇怪行为

时间:2017-03-15 18:41:33

标签: mysql laravel eloquent lumen

我保存一条记录,然后从数据库返回值,Eloquent没有返回所有值。

示例:

如果我有一个名为names的MySQL表,请执行以下操作:

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

我有一个名为Names

的雄辩模型

然后我保存并像这样返回:

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

    $oName->save();

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

它返回:

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

这是正常的吗?

2 个答案:

答案 0 :(得分:1)

是的,这是正常的。 Eloquent不保存,然后执行另一个查询以选择刚刚插入的记录的所有数据。

答案 1 :(得分:1)

您可以手动设置字段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();
}