У меня есть данные с HTML-страницы. И я хочу проверить, существуют ли уже дата и значения места. Если они существуют, он должен выдать ошибку, говорящую, что данные уже присутствуют, если этих данных даты и места нет, это должно позволить пользователю сохранить их.
Вот код, который я написал для его сохранения,
public function StoreSampling(Request $request)
{
$date = Carbon::createFromFormat('d-m-Y', $request->input('date'))->format('Y-m-d');
$doctorname = Input::get('doctorselected');
$product = Input::get('product');
$product= implode(',', $product);
$quantity = Input::get('qty');
$quantity =implode(',',$quantity);
$representativeid = Input::get('representativeid');
//Store all the parameters.
$samplingOrder = new SamplingOrder();
$samplingOrder->date = $date;
$samplingOrder->doctorselected = $doctorname;
$samplingOrder->products = $product;
$samplingOrder->quantity = $quantity;
$samplingOrder->representativeid = $representativeid;
$samplingOrder->save();
return redirect()->back()->with('success',true);
}
Я просмотрел несколько страниц в стеке. И наткнулся на обнаружение существования по ID. А вот и образец,
$count = DB::table('teammembersall')
->where('TeamId', $teamNameSelectBoxInTeamMembers)
->where('UserId', $userNameSelectBoxInTeamMembers)
->count();
if ($count > 0){
// This user already in a team
//send error message
} else {
DB::table('teammembersall')->insert($data);
}
Но я хочу сравнить дату и место. И если их нет, я хочу позволить пользователю сохранить его. В основном пытаюсь остановить повторяющиеся записи.
Пожалуйста, помогите мне с этим.
Уточните свой вопрос, так как атрибут place нигде не упоминается.
@YahyaUddin: Ага, Bymistake добавил еще один метод из контроллера. Получил это решено. Спасибо, что изучили это






Вам нужно изменить свой запрос примерно так:
$userAlreadyInTeam = SamplingOrder::where('date', $date)
->where('place', $place) // I'm not sure what the attribute name is for this as not mentioned in question
// any other conditions
->exists();
if (userAlreadyInTeam) {
// Handle error
} else {
// Create
}
Вам не нужно использовать count() как единственную попытку определить существование.
Также рассмотрите возможность добавления в вашу базу данных атрибута unique с несколькими столбцами, чтобы гарантировать, что у вас нет члена с такими же данными и местом.
Спасибо за самый простой ответ. Выберите это среди всех остальных. Спасибо, что нашли время для разрешения. Решил мое требование.
@NagendraBhat Пожалуйста, отметьте этот ответ как правильный, если это решило вашу проблему
Ага. Спасибо за помощь
Для этого есть очень хорошие вспомогательные функции, называемые firstOrNew и firstOrCreate, последняя создаст ее напрямую, а первую вам нужно будет явно вызвать save. Поэтому я бы сказал следующее:
$order = SamplingOrder::firstOrNew([
'date' => $date,
'place' => $place
], [
'doctorname' => Input::get('doctorselected'),
'product' => implode(',', Input::get('product')),
'quantity' => implode(',',Input::get('qty')),
'representativeid' => Input::get('representativeid')
]);
if ($order->exists()) {
// throw error
return;
}
$order->save();
// success
Спасибо, что нашли время для разрешения. Решил мое требование.
Лучше всего использовать уникальная проверка laravel для нескольких столбцов. Взгляните на это.
Я предполагаю, что id - ваш первичный ключ в таблице sampling_orders. Правило проверки выглядит так:
'date' => ['unique:sampling_orders,date,'.$date.',NULL,id,place,'.$place]
p.s: Я не вижу ввода place в вашем StoreSampling()
И что именно вам мешает адаптировать приведенный вами пример?
$count = DB::table('SamplingOrder')->where('date', $date)->where('place', $place)