【问题标题】:Return model with laravel when it was created创建时使用 laravel 返回模型
【发布时间】: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"}}

我该怎么办?

谢谢你!!

【问题讨论】:

    标签: php json laravel postgresql-9.4


    【解决方案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 处理了这个工作流程有点不同。

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多