【问题标题】:Can't query JSON (Laravel + VueJS)无法查询 JSON (Laravel + VueJS)
【发布时间】:2016-06-02 20:28:03
【问题描述】:

我的问题与这个cant't query json data in laravel 5.2 完全相同

已经尝试从中实现正确的答案,但仍然没有运气。 不知道为什么……

以前,我也发现了这个Laravel 5.2 Codeception functional test issue with PUT / PATCH requests,已经尝试使用他的建议,但也没有运气。

这是我的 Laravel 控制器

public function update(Request $request, $id)
{
    $phonebook = Phonebook::findOrFail($id);
    $phonebook->update($request->all());

    // even i try this
    // Phonebook::findOrFail($id)->update($request->all());
    // return Response::json() or return response()->json();
    // No luck
}

我在 vue 脚本中更新数据的函数

editContact: function(id)
    {
        this.edit = true
        var contactid = this.newContact.ID

        this.$http.patch('/api/contact/' + contactid, this.newContact, function (data) {
            console.log(data)
        })
    },

将我的 vue 脚本更改为上述问题的正确答案,结果相同。没有效果。

我的按钮可以像这样进行编辑

<form action="#" @submit.prevent="addNewContact">

        <div class="form-group">
            <label for="contactName">Name : </label>
            <input type="text" v-model="newContact.CONTACTNAME" class="form-control" id="contactName">
        </div>

        <div class="form-group">
            <label for="phoneNumber">Phone number : </label>
            <input type="text" v-model="newContact.PHONENUMBER" class="form-control" id="phoneNumber">
        </div>

        <div class="form-group">
            <button class="btn btn-primary btn-sm" type="submit" v-if="!edit">Add new Contact</button>
            <button class="btn btn-primary btn-sm" type="submit" v-if="edit" @click="editContact(newContact.ID)">Edit Contact</button>
        </div>

    </form>

注意: 我使用资源或手动路由的路由文件始终相同

Route::resource('/api/contact/', 'PhonebookController');

patch('/api/contact/{id}', ['uses' => 'PhoneboookController@update']);

然后,发生了一些奇怪的事情。

(也许我错了)如果我们看细节没有问题或错误。但是,如果我们更改为响应选项卡,结果为空

在所有这些过程之后,数据没有任何反应。

CONTACTNAME 应该是“Mizukiaaaaaaaa”,就像第一个屏幕截图一样,而不是“Mizuki”

我错过了什么吗? 有什么建议吗?

谢谢

【问题讨论】:

    标签: php json laravel-5 vue.js vue-resource


    【解决方案1】:

    正如我向您建议的那样,尝试在您的控制器中反转 update 方法中的参数。
    要获得响应,您必须将其发回(代码为 200、400、401,无论您想要什么)。

    public function update($id, Request $request)
    {
        $phonebook = Phonebook::findOrFail($id);
        $phonebook->update($request->all());
    
        // your treatment
    
        return Response::json([
           'param' => 'value'
        ], 200);
    
    }
    

    如果您想调试并在响应中看到它,您可以在您的方法中创建dd('debug'),您将在 Ajax 请求响应中看到它。

    这应该适合你!

    【讨论】:

    • 是的,我愿意,结果如何?同样,数据未更新:(我认为,update() 方法或 $request->all return Response::json($phonebook, 200); 可能有问题,这会从表单中提取我更新的值,但这些值并未更新现有数据
    • 将代码 dd($id); 放在更新方法的顶部,并告诉我您是否在响应中获得了您的 id。从逻辑上讲,如果找不到实体,则应引发异常,您应该在 findOrFail 方法周围使用 try / catch。最后,检查您的模型是否在 $fillable 数组中指定了正确的字段。
    • 知道了兄弟!是的,请求和响应没有任何问题,但问题在于我拥有的变异器(我使用过)和模型!在阅读 this oneanother one 之后,我尝试实现它,然后是的!有用。感谢您的所有帮助,伙计,感谢它,抱歉已经打扰您了:)
    • 不错!您应该发布一个答案来解释问题所在以及为遇到相同问题的人找到的解决方案;)
    【解决方案2】:

    浏览了这么多人,问了这么多,终于找到了!请求或响应没有任何问题。我的错误是我使用的突变器更新和我的模型。

    更新答案

    原因回答here 然后我只是更改了控制器上的更新功能。结果在这里

    public function update(Phonebook $phonebook, Request $request, $id)
    {
        // You can add any fields that you won't updated, usually primary key
        $input = $request->except(['ID']);
    
        // Update query
        $saveToDatabase = $phonebook->where('ID', '=', $id)->update($input);
        return $saveToDatabase;
    }
    

    我之前的答案更新了包括主键在内的所有字段,不知何故它成功更新了数据,但它肯定会留下错误(重复的主键)。查询看起来像UPDATE SET field = 'value',没有条件。

    这种情况适用于与其他模型(表)没有任何关系的模型,或者模型充当主模型。

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 2018-04-07
      • 1970-01-01
      • 2019-01-04
      • 2020-01-10
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多