簡體   English   中英

wherenotin()必須是數組類型,null報錯

[英]wherenotin() must be of type array, null given error

所以我試圖更新我的數據,它顯示:

Illuminate\Database\Query\Builder::cleanBindings(): 參數 #1 ($bindings) 必須是數組類型,給定 null

所以當我試圖調查它時,錯誤就在這里

        $tradeSetup->tags()->whereNotIn('user_tag_id', $request->userTag)->delete();

奇怪的是,我已經將值作為數組傳遞,但是當我根本不想返回任何 userTag 時就會出現錯誤。

//form.blade.php

<div class="form-group row">
        <label class="col-md-2 col-form-label">@lang('Tags')</label>
            <div class="col-md-10">
                <select name="userTag[]" class="select2-tag form-control" multiple="multiple">
                    @foreach($userTags as $key => $userTag)
                        <option value="{{ $userTag->id }}" {{ $tradeSetup->tags->where('user_tag_id',$userTag->id)->first() ? 'selected' : '' }}>{{ $userTag->name }}</option>
                    @endforeach
                </select>
            </div>
    </div><!--form-group-->
//TradeSetup model

public function userTag()
    {
        return $this->hasMany(UserTag::class);
    }

    public function tags()
    {
        return $this->morphMany(Tag::class, 'taggable');
    }
//TradeSetupController.php

public function update(Request $request, TradeSetup $tradeSetup)
{
        $request->validate([
            'symbol' => 'required',
            'entry_price' => 'required',
            'target_price' => 'required',
            'stop_loss_price' => 'required',
            'notes' => 'required',
            // 'tags' => 'required',
            'side' => 'required',
            'confidence' => 'required',
            // 'ratio' => 'required',
        ]);


        $tradeSetups = $this->tradeSetupService->update($request, $tradeSetup);

        // dd($request->userTag);

        $tradeSetup->tags()->whereNotIn('user_tag_id', $request->userTag)->delete();

        foreach($request->userTag as $tag){
            if($tradeSetup->tags()->where('user_tag_id', $tag)->exists()){
            // if (Tag::where('user_tag_id', $tag )->exists()) {

            }else if (Tag::whereHas('userTag')->where('taggable_id', $tradeSetup->id)->where('taggable_type', 'App\Domains\TradeSetup\Models\TradeSetup')->get()){

                Tag::create([
                    'user_tag_id'=> $tag,
                    'taggable_type' => get_class($tradeSetups),
                    'taggable_id'=> $tradeSetups->id,
                    // 'type' => $request->type,
                    // 'state'=> $request->state,
                ]);
            }
        }


return redirect()->route('frontend.user.tradeSetup.index')->withFlashSuccess('TradeSetup updated');



}

我試着dd($request->userTag)結果是null

僅供參考,不需要 userTag,因此用戶在存儲/更新時可以不輸入任何 userTag。

也許您沒有標簽<form><input type="submit">將請求發送到您的 controller。必須是提供所有請求信息的操作。

如果您想動態執行,請在 javascript 中使用axiosXmlHttpRequest將請求發送到 controller。

這不是一個解決方案,但你也可以檢查 csrf 保護,有關於 forms 及其保護的完整信息,檢查一下https://laravel.com/docs/9.x/csrf

whereNotIn方法需要一個數組作為第二個參數。 然后在您的表單中沒有選擇任何值,請求不包含 userTag 的任何數據,因此它是 null 而不是空數組。

但是您可以通過為 userTags 定義一個默認參數來簡單地解決這個問題,例如:

$tradeSetup->tags()->whereNotIn('user_tag_id', $request->userTag ?: [])->delete();

更新

我的錯誤,但我實際上不需要將null更改為[] 我只想刪除標簽中的所有記錄。

if(isset($request->userTag)){
        $tradeSetup->tags()->whereNotIn('user_tag_id', $request->userTag)->delete();
    }else{
        $tradeSetup->tags()->delete();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM