2017-10-09 1 views
0

Octave CMSのユーザープラグインを登録イベントにリスンしてポストデータを取得し、ニュースレターテーブルに登録すると、 "SQLSTATE [42S22]:列が見つかりません:1054不明な列 'updated_at' in 'field list'(SQL:cg_newsletterupdated_atcreated_at)値に挿入してください。モデルでそれらを作成していないと私はそれらの列を更新しようとしているわけではない。すべてのヘルプは大歓迎。イベントでプラグインを拡張する10月CMSモデルが正しくインスタンス化されない

モデル

<?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; 


} 

plugin.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'); 
    } 
} 

答えて

0

答えは確かにあなたがタイムスタンプを無効にすることができました。しかし、それらを使用することが推奨されているため、タイムスタンプはデフォルトで有効になっています。

$table->timestamps();を追加することで、移行ファイルに必要な列を簡単に追加できます。これはテーブルに2つのフィールド/列:created_atとupdated_atを追加します。

関連する問題