如何在单个表中获取记录?我仍然使用单表继承时有多个子类型?
id | name | sex | city | type | created_at | updated_at
1 | Akira | female | Jaipur | user | 2014-08-30 | 2014-08-30
2 | Nick | male | Jaipur | admin | 2014-08-30 | 2014-08-30
3 | Sam | male | Delhi | user | 2014-08-30 | 2014-08-30
这是我为用户和管理员创建的单个表。我想在插入之前检查新记录。如果旧记录是用户类型,则不再插入,并且用户类型仅更新记录。但是旧记录是用户类型,那么他们想成为管理员,所以我想插入一个具有管理员类型的新记录。 像:-Sam是一位老用户,但他想成为管理员,因此他插入了一个具有admin类型的新记录。但是如果sam再次插入具有用户类型的数据,那么我就不想再次插入。
id | name | sex | city | type | created_at | updated_at
1 | Akira | female | Jaipur | user | 2014-08-30 | 2014-08-30
2 | Nick | male | Jaipur | admin | 2014-08-30 | 2014-08-30
3 | Sam | male | Delhi | user | 2014-08-30 | 2014-08-30
4 | Sam | male | Delhi | admin | 2014-08-30 | 2014-08-30
使用laravel雄辩的关系
答案 0 :(得分:0)
为什么您需要在同一用户上插入另一个用户?我的意思是,如果您想更改用户类型,则只需更新类型即可。
但是也许您有理由,所以也许您可以在unique
中使用validation
。
$this->validate($request,[
'name' => 'required|string|unique:[nameoftable],name,,,type,'.$request['userType'].'|max:50',
]);
这将检查数据库中是否已存在与您在请求中发送的相同名称的名称。希望对您有所帮助。
答案 1 :(得分:0)
您可以使用Rule :: unique来实现验证规则
$messages = [
'data.name.unique' = 'Given name and user type are not unique',
];
Validator::make($data, [
'data.name' => [
'required',
Rule::unique('users')->where(function ($query) use($name,$type) {
return $query->where('name', $name)
->where('type', $type);
}),
],
],
$messages
);
答案 2 :(得分:0)
对此doc进行引用,并在表中的列name
中添加唯一键。
ALTER TABLE users ADD UNIQUE name (name);
现在,如果您输入相同的名称,则会出现重复的键错误,请使用原始查询:
DB::insert(
'INSERT INTO users (name, sex, city, type) values (?, ?, ?, ?)
ON DUPLICATE KEY UPDATE type=VALUES(type)',
['Sam', 'male', 'Delhi', 'admin']
);
现在,当插入新数据并且表中的列name
被复制时,然后更新旧记录列type
。
顺便说一句,您可以使用this package替代原始查询。
答案 3 :(得分:0)
$data= $request->first_input_data;
$isDataExist=ParentProduct::where('name',$data['name'])->where('type','parent')->first();
if (empty($isDataExist))
{
$isDataExist= new ParentData();
}
$isDataExist->fill($mainProduct)->save();
return $isDataExist->id;
与子类型数据相同的过程具有另一个功能。