[英]How to insert id from both tables into pivot table using laravel query builder
我在数据库中有三个表
我正在从用户注册表单的多个下拉字段中的位置表中获取记录。 填写表单时,用户必须从下拉列表中选择值然后提交。
提交表单后,我想将数据插入到用户表中。 同时我还想将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.