Laravel中数据库未更新

时间:2019-03-10 18:19:37

标签: php laravel vue.js

我正在使用axios发布到我的api中间件,包括参数。但是,当我尝试通过提交表单来更新数据库时,使用chrome中的网络工具获得了状态200,但是我的数据库没有更新。

这是控制器代码:

public function update(Request $request, $id)
{
    //
    Mock::find($request['id']);
    $subject = $request['subject'];

    return Mock::where($subject, $subject)->update([
        $subject => $request['list'],
    ]);
}

这是vue方法:

updateDatabase()
{
    // this goes to the api.php middleware in the routes directory 
    let myJSON = JSON.stringify(questionsList);
    axios.post('api/mock',
    {
        id: 1,
        subject: 'english',
        list: myJSON
    })
},

2 个答案:

答案 0 :(得分:1)

检查您的update方法:

public function update(Request $request, $id)
{
    // ...
    return Mock::where($subject, $subject)->update([ // <---------
        $subject => $request['list'], // <-------
    ]);
    // ...
}

where子句中,第一个参数是列名,而不是值。更新属性时也是如此。检查这一行:

Mock::where($subject, $subject)->/** */

执行此操作:

Mock::where('subject', $subject)->/** */

顺便说一句,我没有用您的方式来获取请求数据,但是如果它返回了null值,请尝试以下方法:

$subject = $request->get('subject');

最后,当执行update操作时,结果是boolean,而不是更新的记录。因此,如果您希望返回更新的对象,请执行以下操作:

public function update(Request $request, $id)
{
    Mock::find($id);
    $mock = Mock::where('subject', $subject)->first();
    $mock->update(['subject' => $request->get('list')]);

    return $mock->fresh();
}

答案 1 :(得分:0)

所有问题都是update函数

public function update(Request $request, $id)
{
    //
    $mock = Mock::find($request->id);
    return $mock->update([
        'subject' => $request->subject,
        'list' => $request->list
    ]);
}

或者也许

public function update(Request $request, $id)
{
    return Mock::where('subject', $request->subject)->update([
        'list' => $request->list,
    ]);
}