Почему я не могу использовать множественный (выбранный) флажок для привязки отношения в laravel?

#php #laravel

#php #laravel

Вопрос:

У меня есть файловая модель и модель пользователя. Эти два связаны отношением многие ко многим, например:

 //File model
public function users(){
    return $this->belongsToMany(User::class)
        ->withTimestamps();
}

//User model
public function files(){
    return $this->belongsToMany(File::class);
}
  

Я использую форму с флажками

 <input value="1" type="checkbox" name="users[]">
<input value="2" type="checkbox" name="users[]">
<input value="3" type="checkbox" name="users[]">
<input value="4" type="checkbox" name="users[]">
  

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

 $file = File::find(1);
$file->users()->attach( $request->users )
  

Но он записывает только одного (первого) пользователя в промежуточную таблицу. Это работает, когда я набираю вручную

 $file->users()->attach( [1,2,3] )
  

но почему-то $request-> users не работает. Что я здесь делаю не так?

Комментарии:

1. Возможно, вам потребуется выполнить цикл, $request->users поскольку он будет поступать как [0=>1,1=>2,2=>3] и из документов, похоже attach() , что он принимает только массивы, не содержащие ключ / значение.

2. @Press, у вас не может быть массива без ключей. Приведенный выше метод с помощью OP должен работать.

3. @SteveBauman ты прав, упс. Тогда единственное, о чем я могу думать, это то, что массив пуст / нулевой.

4. @Skeletor, вы можете убедиться, что вы действительно получаете данные из своей формы? В вашем контроллере попробуйте dd($request->users)

5. $request->get('users') Работает ли? Это должен быть массив

Ответ №1:

Проблема заключалась в том, что я использовал вызов ajax для получения значений из формы. Это было совершенно вне моей компетенции, но (спасибо всем) обсуждение этого заставило меня осознать это. Итак, я решил это с помощью explode().

 $file->users()->attach( explode(',', $request->users);