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();
}
我正在保存一条记录,然后 return 从数据库中获取值,Eloquent 并不是 return 获取所有值。
示例:
如果我有一个叫 names
的 MySQL table,像这样:
| ID | Date | Name |
|----------------------------|-------------------------------------|--------------|
| AUTO INCREMENT PRIMARY KEY | TIMESTAMP DEFAULT CURRENT_TIMESTAMP | VARCHAR(100) |
我有一个名为 Names
然后我保存并 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();
}