当前位置: 首页 > 知识库问答 >
问题:

如何使用laravel查询生成器将两个表中的id插入透视表

许焕
2023-03-14

数据库中有三个表

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

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

提交表单后,我想将数据插入用户表。同时,我还想把用户表中的id插入location_useruser_id列中,把用户注册表下拉列表中的位置选择值插入location_user表location_id列中。

我知道如何使用雄辩的工作,但我在问题中提到,我想知道如何使用laravel查询生成器处理这项任务。

共有3个答案

孟鹏海
2023-03-14

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

马德厚
2023-03-14

您必须使用此代码:

        $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雄辩并在模型中定义关系的项目示例。
你可以注意我的例子:模型产品

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*/);
柯天宇
2023-03-14

有什么理由在这里使用透视表吗?如果要将位置绑定到用户,那么只需向用户表添加一个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);
 类似资料:
  • 我想创建用户角色系统,为此我创建了三个表:用户、角色 它有一个belongToMany关系,透视表存储了用户id

  • 我有下面的查询,我正试图将其转换为Laravel的查询生成器,以便利用自动转义等功能。 实际上,查询所说的是“获取所有主题的名称,如果它们有匹配的report_comment(通过中间的表),将其与主题一起返回”(对于给定的条件,主题有一个或零report_comments)...如果我直接在MySQL中运行查询并返回我期望的结果,查询就可以工作。目前是硬编码的,但最终将成为占位符,以便可以传入任

  • 在我的Laravel应用程序中,我有三个数据库表,分别称为users、projects和roles。它们之间存在m:n关系,所以我也有一个称为PROJECT_USER_ROLE的透视表。透视表包含user_id、project_id和role_id列。请参见MySQL工作台的屏幕截图。 我的用户、项目和角色模型得到了如下定义的归属关系: 现在我可以很容易地获得通过身份验证的用户的项目: 对此的回应

  • 我有一个用户表和一个帐户表。 此帐户表定义用户可以拥有的帐户。 例如 账户: 用户: 我现在有另一个表:users\u accounts 我正在为新用户创建一个界面。在这个页面上,我有基本的细节,但也有一个复选框列表(从accounts表创建)。复选框表示用户需要为其设置的帐户。 我要做的是创建帐户时: 我还想将用户ID和他们需要设置的帐户添加到users_accounts表中。单个用户可能需要多

  • 假设我们正在使用Laravel的查询生成器: 我正在寻找一个等效的SQL: 当我必须键入大量select和WHERE(或者通常在select的列alias中包含别名,并且它在结果数组中使用)时,这将特别有用。如果没有任何表别名,我需要输入更多的内容,所有内容的可读性都会降低。在laravel文档中找不到答案,有什么想法吗?

  • 我有2张桌子。一个有用户,一个有位置。我创建了一个名为user_locations的数据透视表。一个用户可以有一个或多个位置。一个位置可以属于一个或多个用户。所以我在这些桌子上有多对多的关系。我已经从laravel上读到过附加方法,但我不太确定如何使用它。 在“我的用户和位置”表中,我有一个id,该id在“用户id”和“位置id”下进入我的透视表。 目前我遇到了两个问题。In Location::