如何将 in_array 与 belongsToMany 关系一起使用?
How to use in_array with belongsToMany relationships?
我将 belongsToMany
与模型 Riskarea
一起使用,因为我有一个名为 riskarea_fields
的枢轴 table,它将 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
属性 和 select riskarea->riskfields
.
中的所有风险域选项
不幸的是我得到了:
in_array(): Argument #2 ($haystack) must be of type array, int given
这是我的编辑方法:
public function edit(Riskarea $riskarea)
{
return view('riskareas.edit', [
'riskarea' => $riskarea,
'riskfields' => Riskfield::all()
]);
}
有什么想法吗?
你犯了一个小错误。您错误地使用了 in_array() 函数。语法是:in_array(mixed $needle, array $haystack)
。你弄反了。要使用 in_array 函数,您还需要一个数组。因此,您将 collection 转换为数组。您可以使用 Laravel 函数 toArray()
执行此操作。
https://laravel.com/docs/8.x/collections#method-toarray。
在您的 blade 文件中将其更改为:
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
由于您想检查每个 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
我将 belongsToMany
与模型 Riskarea
一起使用,因为我有一个名为 riskarea_fields
的枢轴 table,它将 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
属性 和 select riskarea->riskfields
.
不幸的是我得到了:
in_array(): Argument #2 ($haystack) must be of type array, int given
这是我的编辑方法:
public function edit(Riskarea $riskarea)
{
return view('riskareas.edit', [
'riskarea' => $riskarea,
'riskfields' => Riskfield::all()
]);
}
有什么想法吗?
你犯了一个小错误。您错误地使用了 in_array() 函数。语法是:in_array(mixed $needle, array $haystack)
。你弄反了。要使用 in_array 函数,您还需要一个数组。因此,您将 collection 转换为数组。您可以使用 Laravel 函数 toArray()
执行此操作。
https://laravel.com/docs/8.x/collections#method-toarray。
在您的 blade 文件中将其更改为:
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
由于您想检查每个 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