2016-07-21 4 views
0

Документах Laravel сказать:Сводная таблица с одинаковыми идентификаторами, но различной промежуточной таблицы значений

Вы также можете передать дополнительные промежуточные значения таблицы с идентификаторами: $ user-> роли() -> Синхронизировать ([ 1 => ['notes' => true], 2, 3]);

мне интересно, если это возможно, чтобы сделать что-то вроде этого:

$ user-> роли() -> синхронизации ([1 => [ 'ноты' => верно], 1 => ['notes' => false]]);

Я делаю выше в настоящее время немного по-другому, и Laravel по-видимому, просто переписав 1-й элемент в сводной таблице с 2-го входа, поэтому в сводной таблице выглядит следующим образом:

user role notes 
1  1  false 

Есть ли способ использовать sync(), чтобы он сохранял оба значения в сводной таблице, так что это будет выглядеть так?

user role notes 
1  1  true 
1  1  false 

Если sync() не может сделать это для меня, существует ли другой способ создания желаемого результата?

ответ

0

Вы можете использовать присоединять() вместо того, чтобы, как это:

$user->roles()->attach(1, ['notes' => true]); 
$user->roles()->attach(1, ['notes' => false]); 

и если вы хотите, чтобы стереть предыдущие значения, вы можете использовать синхронизацию() с пустым массивом, прежде чем делать выше, как это:

$user->roles()->sync([]); 
$user->roles()->attach(1, ['notes' => true]); 
$user->roles()->attach(1, ['notes' => false]); 

и тогда результат вас будет будет желаемый результат в БД:

user role notes 
1  1  true 
1  1  false