保存PHP Artisan Tinker中的更改

时间:2019-06-10 12:29:41

标签: php laravel sequelpro tinker

我正在研究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))'

3 个答案:

答案 0 :(得分:1)

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

public $timestamps = false;

答案 1 :(得分:1)

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

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

public $timestamps = false;

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

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

使用:

$table->timestamps();

注意:这将使created_at字段不可为空,这意味着它将始终期望有一个值。但是,在创建/保存时会自动设置。

答案 2 :(得分: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();

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