【问题标题】:Laravel 5, can't insert via request method doesn't existLaravel 5,无法通过请求方法插入不存在
【发布时间】:2016-10-21 23:20:36
【问题描述】:

这就是我试图做的没有任何成功:

在welcome.blade 中,我有一个带有一些板子和子板(由用户随机生成)的foreach,您可以在其中单击子板并执行类似/subboardOne 的操作。我在我的 routes.php 上得到了这个

Route::get('/{subboaName}', 'ThreadController@index');
Route::post('/{subboaName}', 'ThreadController@store');

然后你可以通过表单在这个子板上发布一个帖子,但是因为我真的不知道 laravel 是如何知道他在哪里的,所以表单是这样的:

<form class="form col-md-12 center-block" role="form" method="POST" action="/{{$subboardcoll->id}}">

这个 $subboardcoll->id 来自控制器,它通过索引函数发送集合:

public function index($subboard)
{
    $subboardcoll = Subboard::where('subboaName', $subboard)->first();
    $threads = Thread::where('subboaId', $subboardcoll->id)
           ->orderBy('created_at', 'desc')
           ->get();
    return view('threads.thread', compact('threads', 'subboardcoll'));
}

然后我尝试发送我的表单并存储自动插入 subboardId 的线程,但 laravel 无法识别 subboards 方法:

public function store(Request $request)
    {
        $this->validate($request, [
            'comentario' => 'required|max:2000',
            //'g-recaptcha-response' => 'required|recaptcha',
            //'imagen' => 'required',
        ]);

        $request->subboards()->threads()->create([
            'thrName' => $request->nombre,
            'thrComment' => $request->comentario,
            'thrImg' => $request->imagen,
            'thrSubject' => $request->tema,
        ]);

        return redirect()->back();

    }

并给我这个错误:

BadMethodCallException in Macroable.php line 81: Method subboards does not exist.

你们能帮我知道为什么吗?还有更好的形式来做我正在尝试的事情吗?我是 laravel 的新手,谢谢

编辑:

线程.php

public function subboard()
{
    return $this->belongsTo(Subboard::class, 'subboaId');
}

子板.php

public function thread()
{
    return $this->hasMany(Thread::class);
}

【问题讨论】:

    标签: laravel-5 eloquent laravel-routing


    【解决方案1】:

    请求对象中不存在方法子板。考虑这样做

    public function store($id, Request $request)
    {
        $this->validate($request, [
            'comentario' => 'required|max:2000',
            //'g-recaptcha-response' => 'required|recaptcha',
            //'imagen' => 'required',
        ]);
    
       Subboard::find($id)->threads()->create([
            'thrName' => $request->nombre,
            'thrComment' => $request->comentario,
            'thrImg' => $request->imagen,
            'thrSubject' => $request->tema,
        ]);
    
       //Alternative query statement
       Subboard::where('id', $id)->first()->threads()->create([.....
    
        return redirect()->back();
    
    }
    

    【讨论】:

    • 这样做了吗,通过表单传递了一个 id,但是在执行时它给了我错误:传递给 Illuminate\Database\Grammar::columnize() 的参数 1 必须是数组类型,给定字符串,调用在 E:\laragon\www\DeepElite\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php 第 121 行并定义
    • 抱歉,引用不正确。使用 find 时,您只需传递 $id。我已经编辑了我的答案以反映正确的用法。
    • 似乎 threads() 这是一个未定义的方法,不知道为什么,因为在我的模型上一切都很好,正在编辑我的问题
    猜你喜欢
    • 2016-04-27
    • 2021-10-25
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多