2016-10-11 3 views
0

ExtbaseでDBに2番目のフィールドを追加せずに1:1関係を逆にすることはできますか?TYPO3 Extbase:InversedBy 1:1関係

例: 拡張子にはfe_userを持つことができるContact-Personがあります。 Contact-Person-Domain-Modelは、関係の所有サイトです。

Domain-Model

今、あなたは、DBにそれを追加することなく、FrontendUserに反転プロパティを追加するにはどのような方法があります$contactPerson->getFrontendUser();

使用することができますか?
$frontendUser->getContactPerson(),
、さらに重要なのは$frontendUserRepository->findByContactPerson()です。


私はFrontendUser-モデルにプロパティを追加してみました:

/** 
* FrontendUser 
*/ 
class FrontendUser extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser 
{ 

    /** 
    * @var \Vendor\ExtKey\Domain\Model\ContactPerson 
    */ 
    protected $contactPerson = null; 
} 

そしてfe_usersのTCAオーバーライド:

$GLOBALS['TCA']['fe_users']['columns']['contact_person'] = array(
    'exclude' => 1, 
    'label' => 'LLL:EXT:ExtKey/Resources/Private/Language/locallang_db.xlf:tx_ExtKey_domain_model_contactperson', 
    'config' => array(
     'type' => 'inline', 
     'foreign_table' => 'tx_ExtKey_domain_model_contactperson', 
     'foreign_field' => 'frontend_user', 
     'minitems' => 0, 
     'maxitems' => 1, 
    ), 
); 

しかし、私は呼ん:

/** 
* The repository for Customers 
*/ 
class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository 
{ 
    /** 
    * @param \Vendor\ExtKey\Domain\Model\ContactPerson $contactPerson 
    * @param boolean $ignoreEnableFields 
    * @param boolean $respectStoragePage 
    * @return object 
    */ 
    public function findByContactPerson(ContactPerson $contactPerson, $ignoreEnableFields = false, $respectStoragePage = true){ 
     $query = $this->createQuery(); 
     $query->getQuerySettings() 
      ->setIgnoreEnableFields($ignoreEnableFields) 
      ->setRespectStoragePage($respectStoragePage); 

     $query->matching($query->equals('contactPerson', $contactPerson)); 
     return $query->execute()->getFirst(); 
    } 
} 

を次のSQL-Errorを作成します。

Unknown column 'fe_users.contact_person' in 'where clause'

答えて

2

計算さ双方向の1:1の関係はTYPO3、Mのみでサポートされていない:Nの関係がサポートする余分definition in TCA有する - にも関係の反対側の部位に追加のフィールドが必要となります。

シナリオについては、追加のプロパティとデータベースフィールドを拡張FrontendUserドメインモデルで独自に作成する必要があります。