Почему массив из $ request содержит кавычки вокруг чисел - PullRequest
0 голосов
/ 11 января 2019

У меня есть форма в приложении Laravel со списком множественного выбора. Когда я выбираю несколько пользователей (с id в качестве значения) и отображаю их в моем контроллере, они выглядят так:

array:2 [▼
 0 => "27"
 1 => "28"
]

Он также сохраняет массив в моей базе данных. Но у меня уже есть массив, который содержит последние вставленные идентификаторы. Это выглядит так, когда я повторяю это:

array:2 [▼
 0 => 27
 1 => 28
]

Почему есть разница между этими двумя и как я могу убедиться, что они похожи на второй пример?

Это мой контроллер:

public function store(Request $request)
{

    $file_ids = [];

    // Handle File Upload
    if ($request->hasFile('image')) {

        for ($x = 0; $x < count($request->image); $x++) {
            // Get filename with extension
            $filenameWithExt = $request->file('image')[$x]->getClientOriginalName();
            // Get just filename
            $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
            // Get just extension
            $extension = $request->file('image')[$x]->getClientOriginalExtension();
            // Filename to store
            $filenameToStore = $filename.'_'.time().'.'.$extension;
            // Upload image
            $path = $request->file('image')[$x]->storeAs('public/images', $filenameToStore);

            $file = new File;
            $file->name = $filenameToStore;
            $file->path = $path;
            $file->save();

            array_push($file_ids, $file->id);

        }
    }

    $moment = new Moment;
    $moment->user_id = Auth::user()->id;
    $moment->friend_ids = $request->input('friend_ids');
    $moment->file_ids = $file_ids;
    $moment->name = $request->input('name');
    $moment-> location = $request->input('location');
    $moment->date = $request->input('date');
    $moment->save();
}

А это мой список выбора:

<div class="form-group row">
  <div class="col-sm-12 col-md-6 offset-md-3 col-lg-2 offset-lg-5 col-xl-2 offset-lg-5">
   <label for="friend_ids">These friends were there</label>
   <select id="friend_ids" class="custom-select {{ $errors->has('name') ? ' is-invalid' : '' }}" name="friend_ids[]" required multiple>
    <option value="1">Plorky</option>
    <option value="2">Rizzels</option>
    <option value="3">Crocker</option>
   </select>
 </div>
</div>

Я уже пытался изменить значение = "1" на значение = 1, но это не работает. Может кто-нибудь объяснить мне, почему это работает так? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 12 января 2019
array_push($friend_ids, (int)$request->input('friend_ids');

вернул 1, так что не сработало. Я использовал array_map с intval в качестве обратного вызова, и теперь он устанавливает все строки в целые числа:

$friend_ids = array_map('intval', $friend_ids);
0 голосов
/ 11 января 2019

Когда вы публикуете значения, которые являются целыми числами, в форме HTML, они будут появляться в PHP как строковые значения. Если вы хотите, чтобы они были целыми числами в вашем контроллере, вы можете разыграть их:

array_push($file_ids, (int)$file->id);

или короче: $file_ids[] = (int)$file->id;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...