![](/img/trans.png)
[英]Argument 1 passed to Illuminate\Database\Eloquent\Builder::create() must be of the type array, null given .. Error to post data
[英]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 中使用axios
或XmlHttpRequest
將請求發送到 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.