1

我正在做一个 Laravel 项目。首先,运行迁移并为表创​​建蓝图:

php artisan migrate 

我通过创建具有以下结构的架构来编辑迁移

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

接下来,我使用修补程序编辑器创建了名为 Donation 的模型

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))'
4

3 回答 3

3

目前,您的迁移文件未使用该$table->timestamps()方法,该方法将同时创建created_at日期updated_at时间字段。

尝试使用 tinker 保存新记录时,模型希望同时保存created_atupdated_at字段。如果您想在没有updated_at字段的情况下继续前进,请将以下内容添加到您的Donation模型中:

public $timestamps = false;

否则,您可以通过替换来解决问题:

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

和:

$table->timestamps();

注意:这将使该created_at字段不可为空,这意味着它总是需要一个值。但是,在创建/保存时,这将自动设置。

于 2019-06-10T14:02:44.183 回答
2

默认情况下使用 Eloquent 模型假定您的表中有 created_at 和 updated_at 字段,但在您的情况下,您只使用 created_at 字段。因此,当使用模型保存记录时,它会尝试保存 updated_at 但您没有。要解决此问题,您可以通过以下方式禁用时间戳

public $timestamps = false;
于 2019-06-10T13:09:05.780 回答
0

对我的模型的这种更改解决了我的问题:

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();

最终,在向模型添加新行后重新进入修补程序并从头开始添加更改有所帮助。

于 2019-06-10T22:50:25.993 回答