[英]Laravel - Save additional column value to pivot table
我想将额外的 boolean 值保存到 pivot 表的中间表中。 我有模型与belongstoMany
关系。 我想像这样保存 pivot 表city_school 。
但是为所有学校保存了相同的is_open
值。 必须为每个 school_id 存储相关的is_open
值。
city_id | school_id | is_open
1 1 0
1 2 1
我的模型:
City.php
public function schools()
{
return $this->belongsToMany(School::class)->withPivot('is_open')->withTimestamps();
}
学校.php
public function cities()
{
return $this->belongsToMany(City::class)->withPivot('is_open')->withTimestamps();
}
查看.blade.php
<div>LA<input type="hidden" name="school[]" value="1">
<input type="checkbox" name="is_open[1]">Open
<div>SF<input type="hidden" name="school[]" value="2">
<input type="checkbox" name="is_open[2]">Open
Controller
$school = $request['school'];
$data->schools()->attach($school, ['is_open' => $request->has('is_open')?1:0]);
由于$schools
是一个数组,因此您必须循环并构造所谓的“syncArray”:
$syncArray = [];
foreach ($request->input('schools') as $schoolId) {
$syncArray[$schoolId] = [
'is_open' => $request->has("is_open.{$schoolId}") ? 1 : 0
];
}
在上面的示例中, $syncArray
将包含一个$schoolIds
数组,映射到一个“附加属性”数组,在本例中是is_open
:
[1 => ["is_open" => 1], 2 => ["is_open" => 0]]
然后,您只需调用:
$data->schools()->syncWithoutDetaching($syncArray);
pivot 表中的所有记录都将更新以反映您通过的内容。 通常,您会调用sync()
,但这会删除不在$syncArray()
中的任何内容,并且由于这只是更新属性,因此您不希望这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.