如何使用laravel查询构建器将两个表中的id插入到数据透视表中

时间:2017-05-23 17:30:51

标签: php mysql database laravel laravel-5.3

我在数据库中有三个表

  1. 用户
  2. 位置
  3. location_user (columns:user_id,location_id)
  4. 我在用户注册表单的多下拉字段中从位置表中提取记录。填写表单时,用户必须从下拉列表中选择值,然后提交。

    提交表单后,我想将数据插入用户表。同时,我还想将用户表中的 id 插入 user_id location_user 列以及从用户注册表单下拉到 location_id <的所选位置 / strong> location_user 表的列。

    我知道如何使用eloquent让它工作,但正如我在问题中提到的,我想知道如何使用laravel的查询构建器来处理此任务。

3 个答案:

答案 0 :(得分:0)

有没有理由在这里使用数据透视表?如果您要将位置绑定到用户,则只需将location_id字段添加到用户表并具有一对多关系(位置,用户)。除非您希望用户拥有多个位置,否则我在此处看不到使用数据透视表的任何理由。

无论如何,如果你遵循我的建议,它会变得更容易。但是使用当前的表结构,您需要在相应的模型中设置关系。然后在表单提交上,创建用户并将位置附加到用户。

用户模型

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

位置模型

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

控制器

$user = User::create($request->all());
$user->locations()->attach($request->location_id);

答案 1 :(得分:0)

您必须使用以下代码:

        $user = new user;
        $user->title = $request->title; // your value
        $user->username = $request->username // your value
        $user->save();
        $user->locations()->attach([1,2]); // or ->attach($location_id);
        /// or $user->locations()->sync([1,2]) 

这是使用ORM Eloquent并在模型中定义关系时的项目示例。
你可以注意我的例子: 型号产品

class Product extends Model
{
 public function Categories()
    {
        return $this->belongsToMany('App\Category','product_category','category_id');
    }
}

型号类别

class Category extends Model
{
    public function Products()
    {
        return $this->belongsToMany('App\Product','product_category','product_id');
    }
}

要插入数据库时​​,必须在控制器中编写此代码

        $validated = $request->validated();
        $user = Auth::user();
        $product_id = $request->product_id;
        $product = new Product;
        $product->title = $request->title;
        $product->off_price = $request->off_price;
        $product->price = $request->price;
        $product->available = $request->available;
        $product->user_id = $user->id;
        $product->save();
        $product->Categories()->attach($request->categories/* this is an array*/);

答案 2 :(得分:-1)

在这里,这将使用查询构建器创建3个单独的查询以获得您想要的内容。

$user_id = DB::table('users')->insertGetId(
    ['something' => 'something']
);
$location_id = DB::table('locations')->insertGetId(
    ['something' => 'something']
);

DB::table('location_user')->insert(
    ['user_id' => $user_id, 'location_id' => $location_id]
);

但是Laravel的ORM处理这个问题,所以如果你的模型映射得恰当,你可以这样做:

$location = $user->locations()->create([
    'something' => 'something.',
]);

见这里:https://laravel.com/docs/5.4/eloquent-relationships