Как получить данные, используя единую таблицу наследования в Laravel - PullRequest
0 голосов
/ 27 сентября 2018

Как я могу получить запись в моей единой таблице?У меня есть несколько подтипов, но я все еще использую наследование одной таблицы?

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 снова вставит данные с пользовательским типом, поэтому я не хочу вставлять снова.

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 голосов
/ 28 сентября 2018
   $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;

Тот же процесс с данными дочернего типа, другая функция.

0 голосов
/ 27 сентября 2018

Вы можете использовать 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
);
0 голосов
/ 27 сентября 2018

Ссылка на 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.

Кстати,Вы можете использовать этот пакет для альтернативного необработанного запроса.

0 голосов
/ 27 сентября 2018

Зачем вам нужно вставлять другого пользователя точно так же?Я имею в виду, если вы хотите изменить тип пользователя, вы можете просто обновить тип.

Но, возможно, у вас есть причина, поэтому, возможно, в вашем случае вы можете использовать unique в вашем validation.

$this->validate($request,[
       'name' => 'required|string|unique:[nameoftable],name,,,type,'.$request['userType'].'|max:50',
 ]);

Это проверит, существует ли имя в базе данных того же типа, который вы отправили в своем запросе.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...