我在数据库中有三个表
我在用户注册表单的多下拉字段中从位置表中提取记录。填写表单时,用户必须从下拉列表中选择值,然后提交。
提交表单后,我想将数据插入用户表。同时,我还想将用户表中的 id 插入 user_id location_user 列以及从用户注册表单下拉到 location_id <的所选位置 值 / strong> location_user 表的列。
我知道如何使用eloquent让它工作,但正如我在问题中提到的,我想知道如何使用laravel的查询构建器来处理此任务。
答案 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.',
]);