Как сохранить автоинкрементные значения с помощью laravel eloquent - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь сохранить данные в базе данных, используя красноречивые модели Laravel.Однако первичный ключ представляет собой целое число с автоинкрементом и выдает ошибку:

SQLSTATE [HY000]: общая ошибка: 1364 Поле 'property_valuation_id' не имеет значения по умолчанию.

Любая помощь в том, как это можно решить.

Вот контроллер:

public function index(Request $request)
{
    $property_valuation = new PropertValuation();
    $property_valuation->property_valuation_id="";
    $property_valuation->integer('property_valuation_id')->default(1);
    $property_valuation->district_id = $request->input('district');
    $property_valuation->propertyneighbourhood = $request->input('neighborhood');
    $property_valuation->propertystreet = $request->input('street');
    $property_valuation->numberofbedrooms =$request->input('bedrooms');
    $property_valuation->currency=$request->input('currency');
    $property_valuation->monthlyrent=$request->input('rent');

    $property_valuation->save();
}

А вот модель:

class PropertValuation extends Model
{
    protected $table = 'property_valuation';
    public $primaryKey = 'property_valuation_id';
    public $timestamps = false;
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Прежде всего вы должны использовать

$table->bigIncrements('property_valuation_id');
or
$table->increments('property_valuation_id');

в вашем файле миграции и затем запустите в консоли php artisan миграция: свежая для обновления вашей структуры БД. Также почему вы используете имя приращения настраиваемого поля вместо идентификатора по умолчанию?

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

protected $fillable = ['neighborhood', 'district',.....];

И последнее. Необязательно устанавливать все значения для модели из запроса, laravel делает это сам. Таким образом, ваш метод хранения контроллера может быть

public function store(Request $request)
{
   PropertValuation::create($request->all());

   return redirect()->back();
}

Чище, да? :)

0 голосов
/ 09 мая 2019

Вы перезаписываете поведение Laravels по умолчанию с помощью этих строк

$property_valuation->property_valuation_id="";
$property_valuation->integer('property_valuation_id')->default(1);

Удалите его, и оно должно игнорироваться в запросе SQL, а значение автоинкремента должно быть установлено.

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