2016-07-13 6 views
1

私はTypo3で最初の拡張を設定しようとしていますが、私は非常に苦労しています。私は顧客からの再生を扱う拡張を設定したいと思う。リポジトリに追加した後にオブジェクトのUIDを取得する

入力値を送信した後で、私は新しい顧客をデータベースに保存します。このステップの直後に、データベースから取得して自分が所有しているuidを確認し、顧客からのuidをレクラメーションに保存します。

だから私は

$customer = $this->customerRepository->findByName($name); 

で現在$customer-variableを上書きするためにwan't返された結果であってもvar_dump、顧客の目的は、それが顧客のオブジェクトであると言っている本当にではありません。関数を呼び出すことができません

$customer->getUid() 

この新しい顧客の現在のuidを取得することはできません。しかし、私は埋め立て対象の中に顧客のuidが必要です - どうすればいいですか?

次の問題は:私は

->findAll(), findByIdentifier($identifier) 

ようデシベルにやるでしょすべてのクエリは、ヌルです。

なぜわからないのですか?彼はstoragePidを見つけることができないようですが、私はTypoScriptを正しく設定しました。

私は

$query->getQuerySettings()->setRespectStoragePage(FALSE); 

犬が、この場合に埋設されている任意のアイデアを追加したときに私は、クエリを得ることができますか?

は非常に多く、私の悪い英語のため申し訳ありませんありがとう:P

+0

「次の問題」を別の質問に分割してください。それは無関係です。 – lorenz

答えて

5

はあなたの最初の質問は、より多くの詳細がなく答えるのは難しいです。顧客と埋立地の関係は何ですか?顧客が複数のレクラメーションを持つことができる場合は、顧客とレクラメーションの間に1:nの関係があるとよいでしょう。その場合、$customer->addReclamation($reclamation)を実行するだけで、ユーザーのUIDを気にする必要はありません。

あなたのリポジトリ呼び出しに関して、問題はあなたの呼び出しが、すべての一致するオブジェクトを含むQueryResultを取得することです。 nameは本当にユニークな特性である場合、あなたは

$customer = $this->customerRepository->findOneByName($name); 

を行うことができますこれは名前を持つすべての顧客を探します(一つだけであるべき)$nameに等しく、あなたが戻ってCustomerオブジェクトを取得するので、最初のものを返します。

しかし、これはあまりにも、本当に必要はありません:あなたは顧客を追加した後、すべての変更を永続化する場合は、そのUIDを取得することができます:

$this->customerRepository->add($customer); 
$this->persistenceManager->persistAll(); 
// Returns the customer uid 
$customerUid = $customer->getUid(); 

のPersistenceManagerは次のように注入することができる。

/** 
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager 
* @inject 
*/ 
protected $persistenceManager; 
関連する問題