我想将人们与雄辩的laravel 5分组

时间:2019-02-06 10:55:22

标签: php mysql laravel eloquent

我有两个表 Users Groups ,我想将用户添加到具有良好关系的组中。 mysql表:

表:

      id
      name
      user_id

用户表:

      id
      name
      email
      password

Group.php 模型具有:

    public function user()
        {
            return $this->hasMany('App\User');
        }

User.php 模型具有:

    public function group()
       {
           return $this->belongsTo('App\Group');
       }

GroupController.php

    public function store(Request $request)
     {
       $request->validate([
       'name'=>'required|string',
       'user_id' => 'required',

     ]);
       $group = new Group([
       'name' => $request->get('name'),
       'user_id'=> $request->get('user_id')
     ]);
     $group->save();

     return redirect('/groups')->with('success', 'Group has been added');
     }

create.blade.php 视图

    <div class="form-group">
            <select name="user_id[]"  class="form-control" multiple>
                @foreach ($users as $user)
                <option value="{{$user->id}}">{{$user->name}}</option>
                @endforeach
            </select>
     </div>

错误是“ 数组到字符串的转换” 如果我在TeamController的save()之前添加“ dd($ group)”,则会得到user_ids dd results,但是当它尝试$ group-> save()时;我得到错误,有帮助吗?谢谢

3 个答案:

答案 0 :(得分:2)

您尝试执行的操作无法通过表结构实现。您需要更改表结构,

一组-多位用户

所以,您的表结构应该是

  id
  name

用户

  id
  name
  email
  password
  group_id

您的关系定义应该是

组模型

  public function users()
   {
      return $this->hasMany('App\User', 'group_id');
   }

用户模型

   public function group()
    {
       return $this->belongsTo('App\Group', 'group_id');
    }

最后

public function store(Request $request)
 {
   $request->validate([
   'name'=>'required|string',
   'user_id' => 'required|array',

 ]);
 $group = new Group([
   'name' => $request->get('name'),
 ]);
 $group->save();
  foreach($request->get('user_id') as $id)
  {
    $user = App\User::findOrFail($id);
    $user->group_id = $group->id
    $user->save();
  }

   return redirect('/groups')->with('success', 'Group has been added');
 }

答案 1 :(得分:0)

使用for循环将用户保存到组。

foreach($request->user_id as $user_id)
     $group = new Group([
         'name' => $request->get('name'),
         'user_id'=> $user_id
     ]);
     $group->save();
)

答案 2 :(得分:0)

正如其他评论所述,您应该遍历它们。
您不应该在用户模型上使用group_id吗?
这样,您便拥有唯一的组名,并且可以将用户广告添加到组中,或者如果您希望用户属于多个组,请为其创建数据透视表。

组表:

id
name

用户表:

id
name
email
password
group_id

编辑: 正如其他人所说,您将不得不遍历他们。变量$request->get('user_id')包含在标签中选择的所有用户的数组。您想遍历。这样会在您的组表中创建重复的名称。

foreach ($request->get('user_id') as $userid){
    $group = new Group();
    $group->name = $request->get('name');
    $group->user_id = $userid;
    $group->save();
}