Этот код не будет работать, потому что поле computer
является строкой, а $request('computer')
является массивом.
$order = Order::where('user_id',auth()->id())
->where('computer', request('computer'))
->exists();
Кроме того, как мой комментарий выше, вы должны передать csrf_token
, чтобы отправить форму. Поэтому используйте @csrf
в своем теге формы.
Попробуйте код ниже, я прокомментировал каждый шаг для лучшего понимания.
public function store(Request $request)
{
$this->validate(request(), [
'computer' => 'required'
]);
//Now fetch the user's computer record, it will give you a string.
$users_computers = Order::where('user_id',auth()->id())->get('computer');
//convert this string to array
$users_computers = explode(',',$users_computers);
//Now check if there is at least one order is common or exists
$common_orders = array_intersect($users_computers, $request['computer']);
//throw error if any orders exists already
if(count($common_orders)>0)
{
alert()->error('Warning', 'You ordered already');
return redirect()->back();
//To give which computers user have orders you can access $common_orders values.
}
$order = new Order();
$order->user_id = auth()->user()->id;
$order->description = $request->description;
$computer = implode(",", $request->computer);
$order->computer = $computer;
$order->save();
return redirect()->back();//pass here a success message if you want
}
Используйте красноречивые отношения для более удобного извлечения и хранения заказов пользователя.