Laravel - 5,8 взрыва не работает для взрыва - PullRequest
0 голосов
/ 23 июня 2019

Я сохранил компьютерное поле как implode.

Пользователь не может делать ставки на заказ более одного раза.Если пользователь снова щелкает по заказу, ему будет предложено указать страницу ответа, в которой будет указано, что пользователь сделал предварительную ставку по заказу.

implode

$order = Order::where('user_id',auth()->id())
    ->explode( 'computer', request('computer'));

Я создал несколько флажков и сохранил implode компьютер

order.blade.php

<form action="{{ route('store') }}" method="post">
    <input type="checkbox" name="computer[]" value="1" id="hp">
    <label for="hp">HP</label>
    <input type="checkbox" name="computer[]" value="2" id="dell">
    <label for="dell">DELL</label>
    <input type="checkbox" name="computer[]" value="3" id="asus">
    <label for="asus">ASUS</label>
    <input type="checkbox" name="computer[]" value="4" id="acer">
    <label for="acer">ACER</label>
    <input type="checkbox" name="computer[]" value="5" id="sony">
    <label for="sony">Sony</label>
    <input type="checkbox" name="computer[]" value="6" id="fujitsu">
    <label for="fujitsu">Fujitsu</label>
    <input type="checkbox" name="computer[]" value="other_barnds" id="other_barnds">
    <label for="other_barnds">Other</label>
           <input type="submit" class="btn btn-primary" value="Save">
</form>

OrderController.php

public function store(Request $request)
{
    $this->validate(request(), [
        'computer' => 'required'
    ]);

    $order = Order::where('user_id',auth()->id())
        ->where('computer', request('computer'))
        ->exists(); 

    $order = new Order($request->all());
    $order->user_id = auth()->user()->id;
    $order->description = $request->description;
    $computer = implode(",", $request->computer);
    $order->computer = $computer;
    $order->save();

    if ($order) {
        alert()->error('Warning', 'You ordered already');
        return redirect()->back();
    }
}

1 Ответ

0 голосов
/ 23 июня 2019

Этот код не будет работать, потому что поле 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
}

Используйте красноречивые отношения для более удобного извлечения и хранения заказов пользователя.

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