如何在Laravel中使用单表继承获取数据

时间:2018-09-27 06:08:26

标签: php laravel-5.5

如何在单个表中获取记录?我仍然使用单表继承时有多个子类型?

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雄辩的关系

4 个答案:

答案 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;

与子类型数据相同的过程具有另一个功能。