我如何通过1个请求laravel填充2个数据透视表

时间:2017-02-13 16:52:01

标签: php laravel laravel-5 eloquent laravel-5.3

我有表用户

class User extends Authenticatable
{
    use Notifiable;

    protected $guarded = ['group_c', 'group_s', 'categories'];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

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

    public function categories()
    {
        return $this->belongsToMany('App\Category');
    }
}

这个表与2个anoter表有“多对多”的关系:Group

class Group extends Model
{
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

和类别

class Category extends Model
{
    public function Users()
    {
        return $this->belongsToMany('App\User');
    }
}

我从Post请求获取数据,并将它们放到Users表中,但是'group' 字段我在我的控制器中写入'group_user'数据透视表:

class UserController extends Controller
{

    public function create_user(CrateNewUser $request)
    {
        //dd(Request::all());
        if (Request::input('user_type') == '1') {
            $groups = Request::input('group_c');
            $categories = Request::input('categories');
            User::create(Request::all())->groups()->attach($groups);
        } elseif (Request::input('user_type') == '2') {
            $groups = Request::input('group_s');
            $categories = Request::input('categories');
            User::create(Request::all())->groups()->attach($groups);
        }

        return $this->manage_users();
    }
}

但是我还需要通过一个sql请求将来自另一个Post字段'categories'的数据写入另一个Pivot表categories_user,我该怎么做?

1 个答案:

答案 0 :(得分:1)

要使用其ID将用户链接到一组论坛/类别,您需要使用 sync()方法。它将更新数据透视表,以便只链接同步记录。

以下应该可以解决问题:

$user = User::create(Request::all());
$user->groups()->sync($groups);
$user->categories()->sync($categories);