Laravel, как автоматически получить идентификатор массива - PullRequest
0 голосов
/ 27 сентября 2019

Я знаю, что название это не то понимание, но я попытаюсь объяснить здесь мою проблему.Итак, у меня есть форма, которая автоматически генерирует поля ввода с помощью jquery, и я пытаюсь сохранить эти данные в БД

блейд :

<div>
    <input type="text" placeholder="ID" name="myproduct[]"/>
    <input type="text" placeholder="Șansa" name="mychance[]"/>
    <a href="#" class="delete">Delete</a>
</div>

My Controller :

class SomeController extends BaseController {
    public function someMethod(Request $request)  {
        ...

        $items = '{"'.$request->myproduct[0].'":"'.$request->mychance[0].'", "'.$request->myproduct[1].'":"'.$request->mychance[1].'"}';

        $case = Cases::create([
            'items' => $items
        ]);
        $case->save();

        ...
    }
}

Это работает, но я хочу знать, как получить все данные в $ items без создания новых переменных, таких как $ variable [0], $ variable [1],2, 3 для каждого сгенерированного мной ввода

Ответы [ 3 ]

2 голосов
/ 27 сентября 2019

Если вы можете гарантировать, что у вас всегда будет одинаковое количество продуктов и вариантов, которые вы можете использовать array_combine

$myproduct = [1,2,3];
$mychance = ['test1', 'test2', 'test3'];

$items = array_combine($myproduct, $mychance);
// result: [1 => "test1", 2 => "test2", 3 => "test3"]


// encode it to a string with json_encode
// result: "{"1":"test1","2":"test2","3":"test3"}"
$case = Cases::create(['items' => json_encode($items)]);

Кроме того, вы можете привести столбец предметов к array

В вашей модели Cases добавьте

protected $casts = [
    'items' => 'array',
];

Затем Laravel автоматически сериализует его при хранении и десериализует при получении доступа к массиву.

, тогда вы можете просто сделать

$myproduct = [1,2,3];
$mychance = ['test1', 'test2', 'test3'];

$case = Cases::create(['items' => array_combine($myproduct, $mychance)]);

Array & JSON Casting

Тип приведения массива особенно полезен при работе со столбцами, которые хранятся в виде сериализованного JSON.Например, если ваша база данных имеет тип поля JSON или TEXT, который содержит сериализованный JSON, добавление массива, приведенного к этому атрибуту, автоматически десериализует атрибут в массив PHP при доступе к нему в вашей модели Eloquent

1 голос
/ 27 сентября 2019

Возможно, вы захотите сделать это:

class SomeController extends BaseController {
    public function someMethod(Request $request)  {
        ...
        $items = [];

        foreach($request->myproduct as $i => $myProductSingle) {
            $items[$myProductSingle] = $request->mychance[$i];
        }

        $case = Cases::create([
            'items' => json_encode($items)
        ]);

        $case->save();

        ...
    }
}
0 голосов
/ 27 сентября 2019

Надеюсь, это поможет ..

  $items = [];

    foreach($request->myproduct as $key => $myProduct) {
        $items[$myProduct] = $request->mychance[$key];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...