如何解决与控制器相关的此错误?

Posted

技术标签:

【中文标题】如何解决与控制器相关的此错误?【英文标题】:How can I fix this error related to to controller? 【发布时间】:2021-12-21 06:36:45 【问题描述】:

我有一个问题,谢谢你的帮助。 当有人提交问题时,我希望在 Store 方法中完成此操作 但它给了我一个错误,上面写着:thread_id required ???!

  Subscribe::query()->create([
        'thread_id'=>$thread->id,
        'user_id' => auth()->user()->id
    ]);

这是我的 Store 方法的代码,其中包括订阅模型:

 public function store(Request $request,Thread $thread)

    $request->validate([
        'title' => ['required', 'min:3'],
        'description' => ['required'],
        'channel_id' => ['required'],
        'thread_id' => ['required']
    ]);

    Thread::create([
        'title' => $request->title,
        'description' => $request->description,
        'user_id' => auth()->user()->id,
        'channel_id' => $request->channel_id,
    ]);

    Subscribe::query()->create([
        'thread_id' => $thread->id,
        'user_id' => auth()->user()->id
    ]);
    return redirect('/');

这也是View相关的代码

<form action="route('threads.store')" method="post">
@csrf
<input type="hidden" name="thread_id" value="$thread->id">

<div class=" container-fluid w-75 border border-secondary rounded shadow">
    <div style="font-weight: bolder; font-size: large;" class=" my-3">فرم ارسال پرسش</div>
    <div class="input-group mb-3">
        <div class="input-group-prepend">

        </div>
        <input type="text" name="title" class="form-control" placeholder="موضوع" aria-label="Username" value="old('title')"
               aria-describedby="basic-addon1">
    </div>
    
    <div class="input-group">
        <textarea name="description" class="form-control" aria-label="With textarea" placeholder="متن پرسش"
                  style="height: 200px;">old('description')</textarea>
    </div>


    <div class="input-group mt-3 " style="direction: ltr;">
        <select name="channel_id" class="custom-select" id="channel_id" >
            <option selected disabled value="old('channel_id')">انتخاب عنوان</option>
            @foreach(\App\Models\Channel::all() as $channel)
                <option value="$channel->id">$channel->name</option>
            @endforeach
        </select>

    </div>

    <div class="my-3" style="width: 100px;">
        <button class="btn btn-success" type="submit">ارسال</button>
    </div>


</div>

关于这段代码的问题

<input type="hidden" name="thread_id" value="$thread->id">

我还发送了视图中的线程模型

 public function create(Thread $thread)

    return view('answer-question.thread.thread-create',compact('thread'));

这是订阅数据库 enter image description here

【问题讨论】:

听起来您的验证失败了,因为您的表单中没有thread_id。查看您的表单,这意味着未设置 $thread-&gt;id。但是查看您的代码,您似乎正在尝试创建一个新线程,因此显然还没有线程 ID ... 据我所知,如果您没有构建 url 来自动创建 $thread 对象,请考虑将其从 'thread_id' =&gt; $thread-&gt;id, 更改为 'thread_id' =&gt; $request-&gt;thread_id,,因为更可能是请求有那个属性。 @Don'tPanic 感谢您的指导,那么我应该怎么做才能使 thread_id 订阅? From the docs: "或者,您可以使用 create 方法使用单个 php 语句“保存”一个新模型。插入的模型实例将由 create 方法返回给您”。所以$thread = Thread::create([..,然后$thread-&gt;id 会给你新的ID。 这能回答你的问题吗? Laravel: Get the ID of User::create and insert new row using that ID 【参考方案1】:
public function store(Request $request)

    $request->validate([
        'title' => ['required', 'min:3'],
        'description' => ['required'],
        'channel_id' => ['required'],
        'thread_id' => ['required']
    ]);

    $thread = Thread::create([
        'title' => $request->title,
        'description' => $request->description,
        'user_id' => auth()->user()->id,
        'channel_id' => $request->channel_id,
    ]);

    Subscribe::query()->create([
        'thread_id' => $thread->id,
        'user_id' => auth()->user()->id
    ]);
    return redirect('/');

你不能把store函数保存到线程模型中,它会来的,然后你需要定义线程结束,然后你可以调用它。

【讨论】:

这对我有用,但我想在视图中发送 thread_id 因为订阅模型需要它 可以寄回吗?怎么了【参考方案2】:

当您以 body laravel 形式发送它时,不要将其检测为路由参数。你可以用这个。

 Subscribe::query()->create([
        'thread_id'=>$request->thread_id,
        'user_id' => auth()->user()->id
    ]);

【讨论】:

不是来自请求thread_id @sohan 谢谢当我这样做时,我给出了这个错误:SQLSTATE [23000]:完整性约束违规:1048 列'thread_id'不能为空(SQL:插入subscribesthread_iduser_id, updated_at, created_at) 值 (?, 3, 2021-11-09 14:29:55, 2021-11-09 14:29:55))

以上是关于如何解决与控制器相关的此错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Access 中的此查询错误?

如何解决“flutter build apk”上的此错误

如何解决贝宝沙箱中的此错误

如何解决颤振包 google_mobile_ads 中的此错误

如何解决 react-redux 中的此错误“错误:操作必须是普通对象。使用自定义中间件进行异步操作。”

如何解决 WNetAddConnection2 中的此错误“ERROR_BAD_USERNAME”?