Я получаю ввод из значений флажка в массиве, используя форму начальной загрузки. Я использую массив для хранения значений флажков. Как преобразовать этот массив в строку. Потому что база данных принимает только строковые значения.
Вот мой код
<div class = "form-group col-md-12">
<div class = "custom-control custom-checkbox custom-control-inline">
<input type = "checkbox" id = "eduPrimary" name = "education[]"
class = "custom-control-input" value = "primary" />
<label class = "custom-control-label" for = "eduPrimary">primary</label>
</div>
</div>
<div class = "form-group col-md-12">
<div class = "custom-control custom-checkbox custom-control-inline">
<input type = "checkbox" id = "eduSecondary" name = "education[]"
class = "custom-control-input" value = "secondary" />
<label class = "custom-control-label" for = "eduSecondary">secondary</label>
</div>
</div>
<div class = "form-group col-md-12">
<div class = "custom-control custom-checkbox custom-control-inline">
<input type = "checkbox" id = "eduUniversity" name = "education[]"
class = "custom-control-input" value = "university" />
<label class = "custom-control-label"for = "eduUniversity">university</label>
</div>
</div>
В бэкэнде я использую laravel для хранения значений в базе данных, но возникает ошибка, связанная с сохранением массива в строку в mysql.
public function store(Request $request,AdProfile $adprofile)
{
$adprofile->education = $request->education[];
$adprofile->save();
return redirect()->route('adprofile.profilecomplete');
}
мы можем увидеть вашу модель adProfile?
Что это $request->education[] делает?
В любом языке программирования невозможно неявно преобразовать массив в строку. Используйте функцию implode(), чтобы перебирать экземпляры массива и назначать их строке, как сказал @Tarasovych.
implode(" ",$request->education)спасибо @Tarasovych работает нормально






Вы можете использовать для этого php implode или вы также можете использовать для этого коллекцию laravel.
вот пример
collect([1, 2, 3, 4, 5])->implode('-');
// '1-2-3-4-5'
см. документацию для этого Взрыв
или вы можете использовать функцию php implode
видеть это
$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr);
//Hello World! Beautiful Day!
попробуй это.
$variable = print_r($someArray,1)
В вашей модели «AdProfile» добавьте переменную приведения атрибутов, чтобы laravel автоматически преобразовывал массив в json и json в массив,
Так
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AdProfile extends Model
{
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'education' => 'array',
];
}
print_r($request->education); //It is an array print
$str_json = json_encode($request->education); //array to json string conversion
echo $str_json; // printing json string
print_r(json_decode($str_json)); //printing array after convert json string to array
exit; // exiting further execution to check resutls
Это работает. Спасибо @flik за то, что облегчил мне задачу.
Вы можете использовать функцию implode.
Вручную: https://www.php.net/manual/en/function.implode.php
Теперь ваш код будет выглядеть так:
public function store(Request $request,AdProfile $adprofile)
{
$adprofile->education = implode(',', $request->education[]);
$adprofile->save();
return redirect()->route('adprofile.profilecomplete');
}
Я делаю то же самое с вашим кодом, он дает мне FatalThrowableError Cannot use [] for reading в чем проблема
простой способ — использовать функции json_encode и json_decode php.
если вы хотите сохранить массив в строковом столбце, вы можете использовать:
$adprofile->education = json_encode($array);
и если вы хотите получить это из БД и преобразовать его обратно в массив, используйте:
$array = json_decode($adprofile->education);
вы можете сделать что-то вроде этого: -
<?php
$arr=array("this","is","an","array");
echo "array elements are"."<br>";
foreach($arr as $value)
echo $value."<br>";
echo "The string is "."<br>";
?>
@foreach($arr as $value)
{!! $value !!}
@endforeach