Сохранение изменений в php artisan tinker - PullRequest
1 голос
/ 10 июня 2019

Я работаю над проектом Laravel.Сначала запустили миграцию и создали Blueprint для таблицы:

php artisan migrate 

Я отредактировал миграцию, создав схему со следующей структурой

Schema::create('donations', function (Blueprint $table) {
          $table->string('email');
          $table->string('about');
          $table->timestamp('created_at')->nullable();

Затем я создал модельс именем пожертвование с использованием редактора тинкеров

php artisan make:model Donation 

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

$donation = new App\Donation;
=> App\Donation {#2934}

>>> $donation->email = 'pele@gmail.com'
=> "pele@gmail.com"
>>> $donation->about = '1M donation'
=> "1M donation"

>>> $donation 
=> App\Donation {#2934
     email: "pele@gmail.com",
     about: "1M donation",

 $donation->save();

Ошибка

Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list' (SQL: insert into `donations` (`email`, `about`, `updated_at`, `created_at`) values (pele@gmail.com, 1M donation, 2019-06-10 12:19:04, 2019-06-10 12:19:04))'

Ответы [ 3 ]

1 голос
/ 10 июня 2019

В настоящее время в файле переноса не используется метод $table->timestamps(), который создает поля даты и времени created_at и updated_at.

При попытке сохранить новую запись с помощью средства поворотаМодель ожидает сохранения полей created_at и updated_at.Если вы хотите пойти дальше, не имея поля updated_at, добавьте к вашей модели Donation следующее:

public $timestamps = false;

Иначе, вы можете решить проблему, заменив:

$table->timestamp('created_at')->nullable();

С:

$table->timestamps();

Примечание: Это сделает поле created_at не обнуляемым, то есть оно всегда будет ожидать значение.Однако при создании / сохранении это будет установлено автоматически.

1 голос
/ 10 июня 2019

при использовании моделей Eloquent по умолчанию предполагается, что в вашей таблице есть поля create_at и updated_at, но в вашем случае вы используете только поле create_at. поэтому при использовании модели для сохранения записи она пытается сохранить updated_at, но у вас ее нет. чтобы исправить это, вы можете отключить временные метки с помощью

public $timestamps = false;
0 голосов
/ 11 июня 2019

Это изменение в моей модели решило мою проблему:

namespace App;

use Illuminate\Database\Eloquent\Model;


class Donation extends Model
{
 public $timestamps = false;
}

Кроме того, мне пришлось выйти из редактора тинкеров, а затем запустить следующие команды, чтобы заставить его работать:

$donation = new App\Donation();
$donation->email = 'random@gmail.com'
$donation->about = '1M from Pele'
$donation->save();

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

...