W jaki sposób odebrać wartości zaznaczone checkboxami w Laravelu?

0

Cześć,
mam na stronie parę checkboxów:

 {{ Form::checkbox('categories[]', 'J' , false) }} 
 {{ Form::checkbox('categories[]', 'S' , false) }}
 {{ Form::checkbox('categories[]', 'Super S' , false) }}
 {{ Form::checkbox('categories[]', 'L' , false) }} 

Po stronie backendu, chciałem odebrać zaznaczone wartości $test = $request->input('categories');
Jednak dostaję ciągle wyjątek: Array to string conversion. Co robię źle?

0
foreach($test as $test_value) {
  echo $test_value . "\n";
}
0
Neutral napisał(a):
foreach($test as $test_value) {
  echo $test_value . "\n";
}

To raczej nie jest odpowiedź. Chodziło mi o odebranie tych wartości w controllerze i zapisanie do pola w bazie danych.

0

Odwołujesz się do całej tablicy, a jakaś właściwość potrzebuje tylko jednego konkretnego elementu zgodnie z treścią błędu.

Musisz do kodu wrzucić pojedyncze elementy, czy to w pętli, czy nie. Przykład.

$query = "INSERT INTO `tbl` VALUES({$test[0]}, {$test[1]}//...";

Bindowanie chyba jest już wbudowane we framework, jeśli nie to z'binduj wartości.

1

@kamilos95: Błąd masz najpawdopodobniej z innego miejsca. Nie działają metody opisane juz w innym poście przez @mr_jaro ?

0
Neutral napisał(a):

Odwołujesz się do całej tablicy, a jakaś właściwość potrzebuje tylko jednego konkretnego elementu zgodnie z treścią błędu.

Musisz do kodu wrzucić pojedyncze elementy, czy to w pętli, czy nie. Przykład.

$query = "INSERT INTO `tbl` VALUES({$test[0]}, {$test[1]}//...";

Bindowanie chyba jest już wbudowane we framework, jeśli nie to z'binduj wartości.

Może wystarczyłoby coś zmienić w modelu? Bo w tej chwili wszystkie inne wartości formularza przypisuję sobie do pól modelu. Na koniec wywołuję save() i po sprawie.

0

Jeśli tak jest jak piszesz, to musisz tak napisać kod, żeby zczytywał on wszystkie wartości "oddzielnie", a nie jako całą tablicę array, bo wtedy dostajesz błąd konwersji.

0
Neutral napisał(a):

Jeśli tak jest jak piszesz, to musisz tak napisać kod, żeby zczytywał on wszystkie wartości "oddzielnie", a nie jako całą tablicę array, bo wtedy dostajesz błąd konwersji.

No ale jeżeli chcę to zapisać w jednym polu w bazie danych w varchar to jest to w ogóle możliwe?

0

O ile się nie mylę to baza danych tak nie działa, ale zależy to od tego jeszcze jaka to baza. Włóż dane np. po przecinku do tego pola varchar(-- ...) lub używając mysqli::multi_query(/.../) wszystkie na raz do odpowiedniej kolumny jako record'y.

0

Pokaż metodę jaką zapisujesz. Dobrze rozumiem, że do jednej kolumny chcesz wpakować X wartości? Jak potem chcesz sobie to np. sprawdzać? Może warto rozważyć oddzielną kolumnę per kategoria albo nawet oddzielny model na kategorie który byłby w jakiejś relacji z modelem głównym.

0

jeśli nie bedziesz potrzebować na tych wartościach robić whera, to możesz utworzyć pole json i zapisać obiekt.

0
jurek1980 napisał(a):

Pokaż metodę jaką zapisujesz. Dobrze rozumiem, że do jednej kolumny chcesz wpakować X wartości? Jak potem chcesz sobie to np. sprawdzać? Może warto rozważyć oddzielną kolumnę per kategoria albo nawet oddzielny model na kategorie który byłby w jakiejś relacji z modelem głównym.

Z tym oddzielnym modelem to w sumie nie jest zły pomysł. Jedynie tylko, że później jak i tak chcę multiselect to będę musiał mieć tak samo oddzielne kolumny per kategoria.

0

Model Categoies ma 2 kolumny user_id i category.
Robisz sobie relację po z User.
No i wtedy robisz sobie np.

foreach ($user->categories as $category)
    echo $category;

Przy okazji jak dojdzie kolejna wartość kategorii nic w zasadzie nie zmieniasz

1 użytkowników online, w tym zalogowanych: 0, gości: 1