私は食物アレルギーを中心にしたデータベースを作成しており、食物とアレルギーの間には多対多の関係があります。 severity
と呼ばれるピボット値もあります。これは、その食品のアレルギーの重症度を表す数値を持っています。
このリンクテーブルは次のようになります。
food_id|allergy_id|severity
-------|----------|--------
1 | 1 | 3
1 | 4 | 1
2 | 2 | 1
Eloquentでリンクテーブルを更新しようとした場合($allergy_ids
は配列です)
$food->allergies()->attach($allergy_ids);
ピボット値とともにこのピボットテーブルに複数の値を一度に追加するにはどうすればよいですか?
上記の行を使用して、特定の食品のすべてのallergy_id
を一度に追加できますが、さまざまな重大度値の配列を同時にseverity
列に追加する方法はありますか?たぶん何かのような
$food->allergies()->attach($allergy_ids, $severity_ids);
編集:特定の食品には0〜20個のアレルギーがあり、それが役立っていれば、各アレルギーの重症度は0〜4になります。
あなたはできる。
$user->roles()->sync(array(1 => array('expires' => true)));
最初の2行のハードコードバージョン:
$food = Food::find(1);
$food->allergies()->sync([1 => ['severity' => 3], 4 => ['severity' => 1]]);
動的に、配列$ allergy_idsと$ severitiesを互換性のある状態(サイズと並べ替え)にして、同期データを事前に準備する必要があります。何かのようなもの:
$sync_data = [];
for($i = 0; $i < count($allergy_ids); $i++))
$sync_data[$allergy_ids[$i]] = ['severity' => $severities[$i]];
$food->allergies()->sync($sync_data);
好きなようにできないので、簡単なループをお勧めします。
foreach ($allergy_ids as $key => $id)
{
$food->allergies()->attach($id, array_get($severity_ids, $key));
// should you need a sensible default pass it as a 3rd parameter to the array_get()
}
回避策ただし、単一の重大度レベル/ IDで複数のアレルギーを添付したい場合は、これを行うことができます:
$food->allergies()->attach($allergy_ids, array('severity' => $singleSeverityValue));
最も簡単なのは、次のように追加のデータを添付することです。
$retailer->paymentmethods()->attach($paymentmethod, array('currency' => $paymentmethod->currency));
食物アレルギーの重症度の値を変更しますが、ヒントが得られます... :-)
ユーザーを特定のロールに割り当てるには、以下を実行します。
$user = App\User::find(1);
$user->roles()->attach($roleId);
お役に立てれば