Laravel 同步多个关系加上不包括空数据的数据透视表
Laravel syncing multiple relations plus pivot data excluding empty data
我有一个多对多关系,Recipes
和 Ingredients
。我正在尝试将多个 ingredients
同步到一个 recipe
。我有一个编辑表单,我在其中发送 recipe
和所有 ingredients
.
的列表
在我的 ingredient_recipe
table 中,我有两个额外的数据透视列,number1
和 number2
。
在我的表单中有两个下拉列表,简化如下:
<select name="{{ $ingredient->id }}[number1]">
<option></option> // Empty value
<option value="example1">Example 1</option>
<option value="example2">Example 2</option>
</select>
<select name="{{ $ingredient->id }}[number2]">
<option></option> // Empty value
<option value="example1">Example 1</option>
<option value="example2">Example 2</option>
</select>
提交表单时,我得到以下结果:
array:2 [▼
1 => array:2 [▼
"number1" => example1
"number2" => example2
]
2 => array:2 [▼
"number1" => example2
"number2" => example1
]
]
在我的控制器的 update
方法中,我正在执行以下操作以将配料同步到食谱:
$recipe->ingredients()->sync($ingredients);
其中 $ingredients
是上面发布的请求的输出。
虽然这确实可以完美地工作,但它也会同步下拉列表中没有选择的值,因为 $ingredient->id
将始终被提交。
关于我如何处理这个问题,我有两个问题。
- 我的主要问题是,如何避免同步具有空下拉值的成分?
- 我认为这似乎是我想要实现的目标的错误解决方案,如果是这样,是否有任何正确方向的指示?
我最后做了以下事情:
foreach($ingredients as $key => $value)
{
if(is_null($value['number1']) || is_null($value['number2']))
{
unset($ingredients[$key]);
}
}
这会检查 number1
或 number2
是否为空,如果是,它会从数组中删除整个成分,因此只会同步选定的值。
我有一个多对多关系,Recipes
和 Ingredients
。我正在尝试将多个 ingredients
同步到一个 recipe
。我有一个编辑表单,我在其中发送 recipe
和所有 ingredients
.
在我的 ingredient_recipe
table 中,我有两个额外的数据透视列,number1
和 number2
。
在我的表单中有两个下拉列表,简化如下:
<select name="{{ $ingredient->id }}[number1]">
<option></option> // Empty value
<option value="example1">Example 1</option>
<option value="example2">Example 2</option>
</select>
<select name="{{ $ingredient->id }}[number2]">
<option></option> // Empty value
<option value="example1">Example 1</option>
<option value="example2">Example 2</option>
</select>
提交表单时,我得到以下结果:
array:2 [▼
1 => array:2 [▼
"number1" => example1
"number2" => example2
]
2 => array:2 [▼
"number1" => example2
"number2" => example1
]
]
在我的控制器的 update
方法中,我正在执行以下操作以将配料同步到食谱:
$recipe->ingredients()->sync($ingredients);
其中 $ingredients
是上面发布的请求的输出。
虽然这确实可以完美地工作,但它也会同步下拉列表中没有选择的值,因为 $ingredient->id
将始终被提交。
关于我如何处理这个问题,我有两个问题。
- 我的主要问题是,如何避免同步具有空下拉值的成分?
- 我认为这似乎是我想要实现的目标的错误解决方案,如果是这样,是否有任何正确方向的指示?
我最后做了以下事情:
foreach($ingredients as $key => $value)
{
if(is_null($value['number1']) || is_null($value['number2']))
{
unset($ingredients[$key]);
}
}
这会检查 number1
或 number2
是否为空,如果是,它会从数组中删除整个成分,因此只会同步选定的值。