繁体   English   中英

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

[英]How to insert id from both tables into pivot table using laravel query builder

我在数据库中有三个表

  1. 用户
  2. 地点
  3. location_user (列:user_id、location_id)

我正在从用户注册表单的多个下拉字段中的位置表中获取记录。 填写表单时,用户必须从下拉列表中选择值然后提交。

提交表单后,我想将数据插入到用户表中。 同时我还想将users表中的id插入location_user的user_id列,并将用户注册表单下拉菜单中的locations选择插入location_user表的location_id列。

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

有什么理由在这里使用数据透视表吗? 如果您要将位置与用户联系起来,那么只需将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);

您必须使用此代码:

        $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 = 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*/);

在这里,这将使用查询构建器创建 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM