我正在使用belongsToMany模型Riskarea,因為我有一個名為的資料透視表riskarea_fields,它將模型加入Riskfield其中Riskarea:
class Riskarea extends Model
{
use SoftDeletes;
protected $table = 'riskareas';
protected $fillable = [
'name',
'icon',
];
public function riskfields()
{
return $this->belongsToMany(
Riskfield::class,
'riskarea_fields',
'area_id',
'field_id'
);
}
}
在我的edit.blade.php我有這個代碼:
@foreach ($riskfields as $rf)
<option value="{{ $rf->id }}" @if (old('active', in_array($riskarea->riskfields, $rf->id))) selected="selected" @endif>
{{ $rf->name }}
</option>
@endforeach
我正在嘗試做的是遍歷該riskfields屬性并選擇riskarea->riskfields.
不幸的是我得到了:
in_array(): 引數 #2 ($haystack) 必須是陣列型別,給定 int
這是我的編輯方法:
public function edit(Riskarea $riskarea)
{
return view('riskareas.edit', [
'riskarea' => $riskarea,
'riskfields' => Riskfield::all()
]);
}
任何的想法?
uj5u.com熱心網友回復:
由于您要檢查每個 id 是否存在于關聯的風險欄位中,因此請事先提取它們的 ID。
public function edit(Riskarea $riskarea)
{
return view('riskareas.edit', [
'riskarea' => $riskarea,
'selectedRiskfieldIds' => $riskarea->riskfields()->pluck('id')->toArray(),
'riskfields' => Riskfield::all(),
]);
}
然后你可以做
@foreach ($riskfields as $rf)
<option value="{{ $rf->id }}" @if (old('active', in_array($rf->id, $selectedRiskfieldIds))) selected="selected" @endif>
{{ $rf->name }}
</option>
@endforeach
uj5u.com熱心網友回復:
你有一個小錯誤。您錯誤地使用了 in_array() 函式。語法是:in_array(mixed $needle, array $haystack). 你把它弄反了。要使用 in_array 函式,您還需要一個陣列。因此,您將集合轉換為陣列。你可以使用 Laravel 函式來做到這一點toArray()。
https://laravel.com/docs/8.x/collections#method-toarray。在您的刀片檔案中將其更改為:
in_array($riskarea->riskfields, $rf->id)
到
in_array($rf->id, $riskarea->riskfields->toArray())).
in_array(mixed $needle, array $haystack, bool $strict = false): bool
https://www.php.net/manual/de/function.in-array.php
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/423108.html
標籤:
