创建时使用 laravel 返回模型
Posted
技术标签:
【中文标题】创建时使用 laravel 返回模型【英文标题】:Return model with laravel when it was created 【发布时间】:2018-01-06 08:40:21 【问题描述】:我需要将一个保存为 json 的新模型发送到前面,但我看不到响应列 organizationid
这是我的模特
class Organization extends Model
protected $table = "core.organizations";
protected $fillable = ['description'];
public $primaryKey = "organizationid";
public $incrementing = false;
public $timestamps = false;
这是我的功能
public function saveOrganization(Request $request)
try
$description = $request->input('description');
$organization = new Organization();
$organization->description = $description;
$organization->save();
if (!$organization)
throw new \Exception("No se guardo la organizacion");
return response()->json([
'organization' => $organization,
], 200);
catch (\Exception $ex)
return response()->json([
'error' => 'Ha ocurrido un error al intentar guardar la organización',
], 200);
这是回应
"organization":"description":"Restobar"
我该怎么办?
谢谢你!!
【问题讨论】:
【参考方案1】:$savedOrganization = Organization::create(
[
'description' => $description
]
);
return response()->json([
'organization' => $savedOrganization,
], 200)
而且这段代码没用
if (!$organization)
throw new \Exception("No se guardo la organizacion");
【讨论】:
$organization->save()
返回布尔值,老兄。
谢谢,但我看到了相同的响应 "organization":"description":"Restobar"【参考方案2】:
由于您创建了一个新对象,并且没有从数据库中检索到一个对象,因此它所知道的唯一属性就是您设置的属性。
如果您想获取表格中的其余字段,则需要在保存后重新检索对象。
// create the new record.
// this instance will only know about the fields you set.
$organization = Organization::create([
'description' => $description,
]);
// re-retrieve the instance to get all of the fields in the table.
$organization = $organization->fresh();
【讨论】:
谢谢@patricus !!!,方法fresh() 有效,我在json 响应中看到了organizationid。【参考方案3】:我在 Laravel 7.x 上注意到的一些事情(以前的版本可能也是如此):
我尝试使用 save 处理新对象的创建和更新,如下所示:
public static function saveAnswers(\stdClass $answers)
if($answers->id)
$jsonObject = JsonObject::find($answers->id);
else
$jsonObject = new JsonObject();
$jsonObject->fill((array) $answers);
$jsonObject->user_id = Auth::user()->id;
return $jsonObject->save();
这导致返回值是布尔值 (true)。我有点困惑,因为我之前曾多次成功地在其他端点上使用过保存和返回。最后我发现返回 $jsonObject->save() 总是返回布尔值,但只返回 $jsonObject AFTER SAVING 返回变异对象!所以基本上在单独的命令上保存和返回对象:
$jsonObject->save();
return $jsonObject;
不知道这是什么巫术,但是在使用 C# 和 JAVA 项目后,我已经习惯于通过管道方法首先改变类实例,最后返回类实例......可能是 php 处理了这个工作流程有点不同。
【讨论】:
以上是关于创建时使用 laravel 返回模型的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 模型 - 如果数据库表不存在则返回 null
如何将 laravel 模型工厂创建方法返回的对象转换为包含模型字段的数组?
Laravel:每当我返回一个模型时,总是返回一个与它的关系