2017-12-06 7 views
0

TYPO3拡張子:「フィールドリストの不明な列は」エラー基本的

2: SQL error: 'Unknown column 'edited' in 'field list'' (tx_icingaconfgen_domain_model_checkperiod:NEW5a27f9da8a41d636846075)

:私はextension_builderで新しいクラス/モデルを追加し、そのクラスのレコードを作成するたびに、私は、次のエラーメッセージが表示されます

興味深いのは、 "編集済み"はそのクラスのプロパティではなく、その拡張内の他のクラスのプロパティです。エラーをスローするクラスのTCAとMySqlテーブル自体を検索しましたが、「編集済み」フィールドは実際にはそのクラスの一部ではありません。何が起きてる?

編集:興味深いのは、MySqlテーブルに「編集済み」の列を手動で追加すると、レコードを作成できるということです。しかし、決して私のモデルではこのプロパティを使用していません。なぜ、その名前のMySql列が必要ですか?

+0

checkperiodの詳細については、モデル、TCA、SQLのコードが必要です。 –

答えて

0

それは犯人がext_localconf.phpで、実際にこのコード行だっ判明したように:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['extkey'] = 'Cjk\\Icingaconfgen\\Hook\\EvalHook'; 
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['extkey'] = 'Cjk\\Icingaconfgen\\Hook\\EvalHook'; 

それは私がレコードがで編集されている場合にだけマークし、私の拡張に実装しましたフックですBEかどうか。私は実際にこのフックを使用して、レコードが編集されるたびに編集された特性を0から1に変更します。これは当然のことですが、クラスcheckperiodには '編集済み'というプロパティはありません。しかし、Datamapperのフックは、変更または作成されたすべてのレコードで動作するため、このプロパティを持たないクラスでも 'edited'を変更しようとします。 $ fieldArrayの '編集された'キーがNULLの場合、フック自体の単純なif条件が問題を解決しました。

class EvalHook { 
    function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$pObj) { 


      if($status == "update" && $table != 'tx_icingaconfgen_domain_model_checkperiod'){ 
      $fieldArray[edited] = 1; 
      } 
      elseif($status != "update" && $table != 'tx_icingaconfgen_domain_model_checkperiod){ 
       $fieldArray[edited] = 0; 
      } 


      } 


} 
0

コードを見ることなく、私は何が起こっているのか推測できます。確かに、レコードが永続化されると、フィールドは再作成されます。 TCAで参照した可能性があります。そうでない場合は多分ctrlセクションでcolumnsで:

recodsが変更または作成された場合は、これらのフィールドは自動的に更新され
'ctrl' => [ 
    'tstamp' => 'tstamp', 
    'crdate' => 'crdate', 
    'cruser_id' => 'cruser_id', 
    ... 
], 

。これらのフィールドがさらにあります。したがって、ctrlセクションを確認してください。

あなたがこのようなあなたのTypoScriptでそのデータベースのフィールドに(おそらくは他のクラスの)別のプロパティをマッピングすることも可能である:hereから取ら

plugin.tx_myextension { 
    persistence { 
     classes { 
      MyVendor\MyExtension\Domain\Model\Person { 
       mapping { 
        tableName = tt_address 
        recordType = \MyVendor\MyExtension\Domain\Model\Person 
        columns { 
         birthday.mapOnProperty = dateOfBirth 
        } 
       } 
      } 
     } 
    } 
} 

例。

+0

返事をありがとうが、問題は実際には全く別のものだった。私は実際にレコードを編集するたびに編集された特性を0から1に変更するフックを使用します。これは当然のことですが、クラスcheckperiodには '編集済み'というプロパティはありません。しかし、Datamapperのフックは、変更または作成されたすべてのレコードで動作するため、このプロパティを持たないクラスでも 'edited'を変更しようとします。 $ fieldArrayの '編集された'キーがNULLの場合、単純なif条件は私の問題を解決しました。 – Mondblut

関連する問題