#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);