Как преобразовать массив в строку в laravel?

Я получаю ввод из значений флажка в массиве, используя форму начальной загрузки. Я использую массив для хранения значений флажков. Как преобразовать этот массив в строку. Потому что база данных принимает только строковые значения.

Вот мой код

<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');
}
php.net/manual/en/function.implode.php
Tarasovych 24.04.2019 10:13

мы можем увидеть вашу модель adProfile?

mrhn 24.04.2019 10:14

Что это $request->education[] делает?

u_mulder 24.04.2019 10:14

В любом языке программирования невозможно неявно преобразовать массив в строку. Используйте функцию implode(), чтобы перебирать экземпляры массива и назначать их строке, как сказал @Tarasovych.

Max Voisard 24.04.2019 10:15
implode(" ",$request->education)
Saad Suri 24.04.2019 10:15

спасибо @Tarasovych работает нормально

Assad Yaqoob 24.04.2019 11:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
15
6
45 818
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вы можете использовать для этого 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 за то, что облегчил мне задачу.

Assad Yaqoob 24.04.2019 12:03

Вы можете использовать функцию 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 в чем проблема

Mahdi Safari 24.04.2020 13:26

простой способ — использовать функции 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

Другие вопросы по теме