【问题标题】:Update related data Laravel 5更新相关数据 Laravel 5
【发布时间】:2017-01-13 11:09:42
【问题描述】:

我有这个方法更新来更新属于另一个数据(edisi数据)的数据(期刊数据),下面是代码:

public function update(Jurnal $jurnal, JurnalRequest $request) {
        $input = $request->all();
        if ($request->hasFile('file') && $request->file('file')->isValid()) {
            // Delete old file
            $this->hapusPDF($jurnal);

            // Upload new file
            $input['file'] = $this->uploadPDF($request);
        }
        $id = $request->id; //retrieve id edisi

        $jurnal = Edisi::findOrFail($id)->jurnal()->update($input);
        return redirect()->route('edisi', ['id' => $id]);
    }

上面的方法给了我这个错误:没有模型 [App\Edisi] 的查询结果。我的问题是如何使我的更新方法起作用?谢谢你..

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您正在使用findOrFail($id),但它没有找到任何带有id = $id 的行,因此它会引发异常。你可以这样做:

    $edisi = Edisi::find($id);
    if (!is_null($edisi)) {
        $jurnal = $edisi->jurnal()->update($input);
    } else {
        echo 'There is no edisi with ID = '.$id;
        die();
    }
    

    【讨论】:

    • 试过这个并给了我这个错误:Call to a member function jurnal() on null
    • 完成,给了我这个错误:Router.php 第 1006 行中的 NotFoundHttpException:带有奇怪的 url:1mark.dev/edisi/%5B%5D
    • 这意味着代码可以正常运行,直到 return redirect()->route('edisi', ['id' => $id]); 构建错误的 URL。 %5B%5D[]。在这里阅读:stackoverflow.com/questions/14160843/…
    • 正如我上面所说,Eloquent 找不到具有指定 ID 的 edisi。您可以使用die 来终止脚本。我已经更新了上面的代码。
    • 它现在正在工作,似乎问题是我忘记请求 edisi id 来编辑方法.. 无论如何,谢谢伙计!
    【解决方案2】:

    假设您要更新单个journal 并且$jurnal 具有您要更新的journal id,您的更新语句将如下所示:

    $jurnal = Jurnal::findOrfail($jurnal->id)->update($input);
    

    【讨论】:

    • 是的,我想更新属于 edisi 的单个期刊数据。所以问题是我也想保留 edisi id :)
    • 但是,由于期刊有自己的主键,edisi-jurnal 有一对多的关系。我认为您不需要edisi-> id。对吗?
    • 是的,期刊有自己的主键,是的,两个表都有一对多的关系。所以你的意思是告诉我我不需要 edisi id ?如果是这样,我将如何将期刊数据保存到指定的 edisi ?
    • 你能试试上面的代码吗?我觉得更新就够了
    • 它现在正在工作,似乎问题是我忘记请求 edisi id 来编辑方法.. 无论如何,谢谢伙计!
    【解决方案3】:

    我认为您没有使用检索任何 id

    $request->id
    

    你应该使用

    $request->get('id') // And you must ensure that there is an input with 'id' name comming from client
    

    你也可以使用$input['id']。 希望对你有帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多