Я получаю «SQLSTATE [23000]: нарушение ограничения целостности», когда пытаюсь добавить команду

Когда я пытаюсь получить продукт и командую им, я получаю «Illuminate\Database\QueryException SQLSTATE [23000]: нарушение ограничения целостности: 1048 Имя столбца не может быть нулевым (SQL: вставить в commande (name, familyname, quantity, mobile, ville, adresse, id_product, user_id, updated_at, created_at) значения (?, ?, ?, ?, ?, ?, ?, ?, 21.11.2022 21:30:27, 21.11.2022 21:30:27))" Я пытаюсь управлять продуктом, в котором у каждого продукта есть разные пользователи. Я использую внешний ключ в таблице продуктов (user_id), и у каждой команды есть пользователь для ее проверки.

Это моя функция в контроллере:


public function getProduct($id, Request $request)
{

    $product = Product::find($id);
    $commande = new AppCommande;
    $commande->name = $request->input('name');
    $commande->familyname = $request->input('familyname');
    $commande->quantity = $request->input('quantity');
    $commande->mobile = $request->input('mobile');
    $commande->ville = $request->input('ville');
    $commande->adresse = $request->input('adresse');
    $commande->id_product = $request->input('id_product');
    $commande->user_id = $request->input('id_user');
    $commande->save();
    return view('product', ['product' => $product], ['commande' => $commande]);

}

Это мой маршрут:


Route::get('/product/{id}', \[ 'uses' =\> 'CommandeUserController@getProduct', 'as' =\> 'product.single' \]);

а это вид:

@extends('layouts.app')
@section('content')

    <div class="col-sm-6 col-md-4">
        <div class="thumbnail">
            <img src="{{ asset('uploads/product/'.$product->image) }}" width="90px" alt="image">
            <div class="caption">
                <h3> {{$product->name}} </h3>
                <p class="discription"> {{$product->description}} </p>
                <div class="clearfix">
                    <div class="pull-left price"/>$ {{$product->price}}</div>
              {{-- <a href= {{ route('commander', ['id' => $product->id ]) }} class="btn btn-danger pull-right" role="button">Commander ce produit</a> --}}
            </div>
        </div>
    </div>
    <div class="card">
        <div class="card-header">
            Create Commande
        </div>
    
        <div class="card-body">
            <form action="{{ route("admin.commandes.store") }}" method="POST" enctype="multipart/form-data">
                @csrf
                <div class="form-group {{ $errors->has('name') ? 'has-error' : '' }}">
                    <label for="name">Name</label>
                    <input type="text" id="name" name="name" class="form-control" value="{{ old('name', isset($commande) ? $commande->name : '') }}">
                    @if($errors->has('name'))
                        <em class="invalid-feedback">
                            {{ $errors->first('name') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.name_helper') }}
                    </p>
                </div>
                <div class="form-group {{ $errors->has('familyname') ? 'has-error' : '' }}">
                    <label for="name">Family Name</label>
                    <input type="text" id="familyname" name="familyname" class="form-control" value="{{ old('familyname', isset($commande) ? $commande->familyname : '') }}">
                    @if($errors->has('name'))
                        <em class="invalid-feedback">
                            {{ $errors->first('name') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.name_helper') }}
                    </p>
                </div>
                <div class="form-group {{ $errors->has('mobile') ? 'has-error' : '' }}">
                    <label for="quantity">Mobile</label>
                    <input type="number" id="mobile" name="mobile" class="form-control" value="{{ old('mobile', isset($commande) ? $commande->mobile : '') }}" step="1">
                    @if($errors->has('mobile'))
                        <em class="invalid-feedback">
                            {{ $errors->first('mobile') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.price_helper') }}
                    </p>
                </div>
                <div class="form-group {{ $errors->has('quantity') ? 'has-error' : '' }}">
                    <label for="quantity">Quantity</label>
                    <input type="number" id="quantity" name="quantity" class="form-control" value="{{ old('quantity', isset($commande) ? $commande->quantity : '') }}" step="1">
                    @if($errors->has('price'))
                        <em class="invalid-feedback">
                            {{ $errors->first('price') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.price_helper') }}
                    </p>
                </div>
                <div class="form-group {{ $errors->has('ville') ? 'has-error' : '' }}">
                    <label for="ville">City</label>
                    <input type="text" id="ville" name="ville" class="form-control" value="{{ old('ville', isset($commande) ? $commande->familyname : '') }}">
                    @if($errors->has('ville'))
                        <em class="invalid-feedback">
                            {{ $errors->first('ville') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.name_helper') }}
                    </p>
                </div>
                <div class="form-group {{ $errors->has('adresse') ? 'has-error' : '' }}">
                    <label for="adress">Adresse</label>
                    <input type="text" id="adresse" name="adresse" class="form-control" value="{{ old('adresse', isset($commande) ? $commande->adresse : '') }}">
                    @if($errors->has('adresse'))
                        <em class="invalid-feedback">
                            {{ $errors->first('adresse') }}
                        </em>
                    @endif
                    <p class="helper-block">
                        {{ trans('global.product.fields.name_helper') }}
                    </p>
                </div>
                <input type="hidden" name="id_product" value=" {{ $product->id }}" />
                <input type="hidden" name="user_id" value=" {{ $product->user_id }}" />
    
                    <input class="btn btn-danger" type="submit" value="{{ trans('global.save') }}">
                </div>
            </form>
        </div>
    </div>
     @endsection

Вы действительно заполняете <input> вместо name? У вас нет никакой проверки, поэтому, если вы ее не заполните, а ваша база данных не позволяет null, вы получите эту ошибку. Кроме того, вы не должны использовать Route::get() для создания чего-либо. Взгляните на контроллеры ресурсов Laravel, чтобы увидеть типичный подход: laravel.com/docs/9.x/controllers#resource-controllers

Tim Lewis 21.11.2022 22:53

Я пытаюсь заполнить имя, но ошибка возникает перед формой для заполнения

Malik Kadri 22.11.2022 00:11

зачем getProduct создает запись? у вас должен быть маршрут POST, который создает эту запись, маршрут GET, который возвращает представление, должен просто собирать необходимые данные для возвращаемого представления.

lagbox 22.11.2022 01:36

Да, конечно. Если маршрут, который вы используете для отображения формы, также ожидает ввода из формы, как вы ожидаете, что это будет работать? Вам нужно разделить маршруты. Опять же, посмотрите на тот контроллер ресурсов, который я связал; он показывает, как контроллер должен использовать отдельные маршруты: один GET для отображения формы создания, один POST для обработки отправки формы, еще один GET и POST для редактирования и т. д. и т. д.

Tim Lewis 22.11.2022 03:08
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Разработка Laravel помогает бизнесу достичь новых высот
Разработка Laravel помогает бизнесу достичь новых высот
Глобальный рынок электронной коммерции постоянно расширяется. Услуги Laravel Development позволяют им увеличить целевой рынок и продажи, предоставляя...
Использование SendGrid в Laravel
Использование SendGrid в Laravel
Чтобы использовать Sendgrid в Laravel, вам нужно выполнить следующие шаги:
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
0
4
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поскольку мне кажется странным, что ваше сообщение об ошибке не принимает никакого значения из вашего запроса, попробуйте добавить переменную $commande в стандартную скобку '()' при последней инициализации модели.

$commande = new AppComande();

Что ж, я изменил создание команды на другую функцию, теперь я получаю: Свойство [имя] не существует в этом экземпляре коллекции.

Malik Kadri 22.11.2022 16:42

@MalikKadri Если у вас возникла новая проблема, задайте новый вопрос. Но, с учетом сказанного, сначала выполните поиск этой ошибки в Stackoverflow; вы не единственный, у кого была эта ошибка: stackoverflow.com/questions/70030106/… , stackoverflow.com/questions/41366092/… , stackoverflow.com/questions/63219872/… . Скорее всего, вы используете ->get() вместо того, чтобы использовать ->first().

Tim Lewis 22.11.2022 21:27
Ответ принят как подходящий

Здравствуйте, я изменил getProduct() на и он работает:

 public function getProduct($id, Request $request)
{

    $product = Product::find($id);


    return view('product', ['product' => $product]);

}

и я использовал в форме новую функцию магазина для команды:

 public function store(StoreProductRequest $request)
{

            $user_id=auth()->user()->id;
            $commande = new AppCommande();

            $commande->name = $request->input('name');
            $commande->familyname = $request->input('familyname');
            $commande->quantity = $request->input('quantity');
            $commande->mobile = $request->input('mobile');
            $commande->ville = $request->input('ville');
            $commande->adresse = $request->input('adresse');
            $commande->id_product = $request->input('id_product');
            $commande->user_id=$user_id;
            $commande->save();


       return redirect('/commandeuser/confirm')->with('status', 'commande ajoutée!');

}

Другие вопросы по теме