【问题标题】:october cms extending plugin with event Model is not instantiated correctly带有事件模型的 october cms 扩展插件未正确实例化
【发布时间】:2017-10-09 21:13:48
【问题描述】:

我正在尝试扩展 october cms 用户插件以监听注册事件并获取发布数据并写入用户和时事通讯订阅时事通讯表,当保存时显示“SQLSTATE [42S22]:未找到列:1054 '字段列表'中的未知列'updated_at'(SQL:插入cg_newsletterupdated_atcreated_at)值“。我不知道为什么它抱怨创建或更新日期我没有在模型,我不会尝试更新这些列。非常感谢任何帮助。

型号

<?php


namespace CG\Newsletter\Models;

use Model;

/**
 * Model
 */
class Newsletter extends Model {

    protected $primaryKey = 'id';

    /**
     *
     * @var string The database table used by the model.
     */
    public $table = 'cg_newsletter';


    public $belongsTwo = [
        'user' => ['rainlab/user/models/user']
    ];

    public $isSubscribed;


}

插件.php

<?php


namespace CG\Newsletter;


use System\Classes\PluginBase;
use Log;
use Event;
use Rainlab\User\Components\Account as RainlabAccount;
//use Rainlab\User\models\user as RainlabUser;
use Request;
use Illuminate\Support\Facades\Input;
use Rainlab\user\Models\User as RainlabUser;
use Auth;
use CG\Newsletter\Models\Newsletter;


class Plugin extends PluginBase {


    public function registerSettings() {

        return [ 
                'settings' => [ 
                        'label' => 'Newsletter',
                        'description' => 'Newsletter subscription',
                        'category' => 'misc',
                        'icon' => 'icon-shopping-basket',
                        'class' => 'CG\Newsletter\Models\Settings',
                        'order' => 500,
                        'keywords' => 'newsletter settings',
                        'permissions' => [ 
                                'admin' 
                        ]     
                ] 
        ];
    }

    public function boot() 
    {

        Event::listen('eloquent.updating: RainLab\User\Models\User', 
function(){
                $data = post();

               if (array_key_exists('email', $data)) {  

                 Log::debug(__FUNCTION__,[$data['email']]);                     
                 $user = RainlabUser::findByEmail($data['email']);

                 Log::debug(__FUNCTION__,[$user->id]);  
                 $newsletter = new Newsletter();
                 $newsletter->belongsTwo = $user->id;
                 $newsletter->isSubscribed =1;
                 $newsletter->save();

           }
        });



    }   

}

迁移文件

<?php namespace CG\Newsletter\Updates;

use Schema;
use October\Rain\Database\Updates\Migration;

class BuilderTableCreateCgNewsletter extends Migration
{
    public function up()
    {
        Schema::create('cg_newsletter', function($table)
        {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->integer('user_id')->unsigned()->index();
            $table->tinyInteger('isSubscribed');
            $table->foreign('user_id')
              ->references('id')
              ->on('users')
              ->onDelete('CASCADE'); 

        });
    }

    public function down()
    {
        Schema::dropIfExists('cg_signshop_menus');
    }
}

【问题讨论】:

    标签: laravel-5 octobercms


    【解决方案1】:

    将此添加到我的模型中修复了此错误。我在这里找到了答案 https://octobercms.com/docs/database/mutators 在日期突变器下

    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;
    

    【讨论】:

      【解决方案2】:

      确实,您可以禁用时间戳。但使用它们是一种很好的做法,因此默认情况下启用时间戳。

      您可以通过添加 $table-&gt;timestamps(); 在迁移文件中轻松添加所需的列。这将向表中添加两个字段/列:created_at 和 updated_at。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 2016-02-01
        • 1970-01-01
        相关资源
        最近更新 更多