申し訳ありませんが、この質問に既に回答されている場合、私は何も見つかりませんでした。Symfony2でモデルマネージャを使用するには?
私はSymfony2の中で、このモデルを構築しています。このようなTranslationMappingで
class LogEntry {
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \DateTime $log_timestamp
*
* @ORM\Column(name="log_timestamp", type="datetime")
*/
private $log_timestamp;
/**
* @var TranslationMapping $source
*
* @ORM\ManyToOne(targetEntity="TranslationMapping", cascade={"persist"})
* @ORM\JoinColumn(name="source", referencedColumnName="id")
*/
private $source;
/**
* @var TranslationMapping $target
*
* @ORM\ManyToOne(targetEntity="TranslationMapping", cascade={"persist"})
* @ORM\JoinColumn(name="target", referencedColumnName="id")
*/
private $target;
...
}
は:
/**
* LogAnalyzer\Bundle\CombatLogBundle\Entity\TranslationMapping
*
* @ORM\Table(name="TranslationMapping", uniqueConstraints={@ORM\UniqueConstraint(name="idValue_idx", columns={"stringId", "stringValue"})})
* @ORM\Entity
* @ORM\HasLifecycleCallbacks()
*/
class TranslationMapping
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $stringId
*
* @ORM\Column(name="stringId", type="string", length=255)
*/
private $stringId;
/**
* @var string $stringValue
*
* @ORM\Column(name="stringValue", type="string", length=255)
*/
private $stringValue;
/**
* @ORM\PrePersist
*/
public function beforePersist()
{
if ($this->stringId == null) {
$this->stringId = "laGen_".time();
}
}
ログ・エントリは、正規表現によって解析された文字列に基づいて構築されています。 TranslationMappingは、キー/値格納された変換文字列を表します。私がやっている現在
です:
ログ・エントリ を表示LogEntryRepository$logEntry = new LogEntry();
$source = new TranslationMapping();
if ($logEntry->getSourceIsPlayer()) {
$source->setValueKey(str_replace("@", "", $matches["source"][0]));
} else {
$source->setValueKey($matches["source"][0], $matches["source_id"][0]);
if (isset($matches["source_companion_name"][0])) { // It's a companion !
$companion = new TranslationMapping();
$companion->setValueKey($matches["source_companion_name"][0], $matches["source_companion_id"][0]);
$logEntry->setSourceCompanion($companion);
$source->setValueKey(str_replace("@", "", $matches["source"][0])); // And the source is the player's character name
}
}
$logEntry->setSource($source);
$logEntry->setTargetIsPlayer(strpos($matches["target"][0], "@") !== false);
$target = new TranslationMapping();
if ($logEntry->getTargetIsPlayer()) {
$target->setValueKey(str_replace("@", "", $matches["target"][0]));
} else {
$target->setValueKey($matches["target"][0], $matches["target_id"][0]);
if (isset($matches["target_companion_name"][0])) { // It's a companion !
$companion = new TranslationMapping();
$companion->setValueKey($matches["target_companion_name"][0], $matches["target_companion_id"][0]);
$logEntry->setTargetCompanion($companion);
$target->setValueKey(str_replace("@", "", $matches["target"][0])); // And the target is the player's character name
}
}
$logEntry->setTarget($target);
内の文字列からログ・エントリを構築するログ・エントリ
を構築するための文字列を取得
私の問題は、キーと値のペアがまだ存在しない場合に翻訳マッピングエンティティを作成したいということです。
- 私は私が使用することはできませんリポジトリ
- からサービスにアクセスすることはできません別のリポジトリ
- からTranslationMappingRepositoryにアクセスすることはできません。しかし、私は以来、それを行うことができますどのように表示されません基本的に私は何をしようとしているDoctrine2
経由DUPLICATE KEY UPDATEクエリINSERT ... ONしてDB操作を管理するでしょう私のTranslationMappingエンティティのためのマネージャーを取得します(必要に応じて&挿入をフェッチ)して公開することですすべてのSymfonyアプリケーションを通してエンティティ主にリポジトリに。
私はいくつかのソリューションを試して、オプションを使い果たしました。誰かがこれをどのように達成できるかの手掛かりを持っていますか?
ありがとうございました。
お返事ありがとうございます。私はsymfonyのウェブサイト上で例を見つけられませんでした。あなたがリンクを提供できればうれしいです。 Symfonyが提供する翻訳については、実際にはそれが意味するものではありません。私はこのようにしてみましたが、最終的に私自身の実装が必要であることを見ました。 –
更新していただきありがとうございます、私はあなたのポイントを持っていなかった。 TranslationMappingをサービスにデポートしようとしましたが、LogEntryの作成を追放するのはもっと賢い方法です。ありがとう! –