2016-12-19 6 views
1

У меня есть CheckboxSetField с цифрами 1 - 10. У меня также есть много-много отношений, которые обновляются с номерами.Silverstripe many-many relationship для CheckboxSetField

Несмотря на то, что я могу выбрать номера без проблем, у меня возникли проблемы с вызовом этих выбранных номеров снова после его отправки.

CheckboxSetField::create("Numbers","Numbers") 
      ->setSource(array("1" => "1", 
          "2" => "2", 
          "3" => "3", 
          "4" => "4", 
          "5" => "5", 
          "6" => "6", 
          "7" => "7", 
          "8" => "8", 
          "9" => "9", 
          "10" => "10",)) 
      ->setInline(true) 
      ->addExtraClass("inline-checkbox") 
      ->setDefaultItems($numberlist) 

Я создал запрос, который возвращает все номера в setDefaultItems. возвращает число в виде строки, которые я затем преобразовать в массив, но массив возвращает

Array ([0] => 1) Array ([0] => 2) Array ([0] => 3) 

Если массив:

(array("1" => "1", "2" => "2", "3" => "3")) 

Это похоже на работу.

Я что-то упустил?

ответ

2

Ваш $numberlist, кажется, содержит только цифры в качестве значений, но вам нужны ключи и значения.

Вы можете достичь этого, используя array_combine, например:

->setDefaultItems(array_combine($numberlist, $numberlist)) 

Подсказка: для создания числовых диапазонов, вы можете использовать функцию range, так что вы можете сократить свой setSource код:

->setSource(array_combine(range(1,10), range(1,10))) 
+0

Большое спасибо, это помогает! – Craig

+0

Просто еще одна вещь на этом. Есть ли причина, почему, когда я отменяю выбор, он не обновляет БД, кроме числа 1? Если 1 не установлен, он удаляется из БД, но после повторной загрузки страницы любой другой номер будет снова проверен. Спасибо – Craig

+0

Является ли "Numbers" вашим отношением 'many_many'? Я не могу помочь, не зная настройки. – bummzack