Laravel 5 - 具有M:N关系的时间戳上的SQL错误

时间:2015-04-03 14:00:25

标签: php laravel many-to-many laravel-5

我有一个模型User的表格和模型Feature的另一个表格。

我希望用户对功能进行投票,因此我为它创建了一个表:

public function up()
{
    Schema::create('votes', function(Blueprint $table) {

        $table->increments('id');

        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

        $table->integer('feature_id')->unsigned();
        $table->foreign('feature_id')->references('id')->on('features')->onDelete('cascade');

        $table->timestamps();
    });
}

我在Feature模型上定义关系:

public function votes()
{
    return $this->belongsToMany('App\User', 'votes');
}

在控制器中,我尝试对登录的用户执行投票。

public function vote(Feature $feature) {
    $feature->votes()->save(Auth::user());
}

但是当我执行此操作时,我收到以下消息:

  

SQLSTATE [23000]:完整性约束违规:19 NOT NULL约束失败:votes.created_at(SQL:插入"投票"(" feature_id"," user_id&# 34;)值(1,1))

如果我看到该消息,似乎created_at字段似乎没有被填充,但这些字段通常由Laravel自动处理。

我弄乱了什么?

1 个答案:

答案 0 :(得分:3)

如果要在数据透视表上使用时间戳,则必须在模型方法上声明时间戳。

public function votes()
{
    return $this->belongsToMany('App\User', 'votes')->withTimestamps();
}