Doctrine 2 ManyToOne отображает аннотации - PullRequest
3 голосов
/ 16 марта 2012

TwitterTweets сущность:

/**
 * MyBundle\CoreBundle\Entity\TwitterTweets
 *
 * @ORM\Table(name="twitter_tweets")
 * @ORM\Entity
 */
class TwitterTweets
{
    /**
     * @var TwitterUsers
     *
     * @ORM\ManyToOne(targetEntity="TwitterUsers", inversedBy="tweets")
     * @ORM\JoinTable(name="twitter_tweets",
     *   joinColumns={
     *     @ORM\JoinColumn(name="twitter_user_id", referencedColumnName="twitter_id")
     *   }
     * )
     */
    private $twitterUser;
}

Субъект TwitterUsers:

/**
 * MyBundle\CoreBundle\Entity\TwitterUsers
 *
 * @ORM\Table(name="twitter_users")
 * @ORM\Entity
 */
class TwitterUsers
{
    /**
     * @var TwitterTweets
     *
     * @ORM\OneToMany(targetEntity="TwitterTweets", mappedBy="twitterUser")
     */
    private $tweets;
}

таблица твиттеров:

CREATE TABLE `twitter_tweets` (
 `period` int(6) unsigned NOT NULL,
 `tweet_id` varchar(30) NOT NULL,
 `twitter_user_id` bigint(20) unsigned NOT NULL,
 `tweet` varchar(255) NOT NULL,
 `url` text NOT NULL,
 `retweet_count` varchar(10) NOT NULL DEFAULT '0',
 `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`period`,`tweet_id`),
 KEY `period` (`period`),
 KEY `tweet_id` (`tweet_id`),
 KEY `twitter_user_id` (`twitter_user_id`),
 KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

таблица twitter_users:

CREATE TABLE `twitter_users` (
 `twitter_id` bigint(20) unsigned NOT NULL,
 `user` varchar(255) NOT NULL,
 `username` varchar(255) NOT NULL,
 `profile_image_url` text NOT NULL,
 PRIMARY KEY (`twitter_id`),
 KEY `user` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Я получаю эту ошибку при выполнении простого SELECT:

$this->getDoctrine()->getRepository('MyBundleCoreBundle:TwitterTweets')->findOneBy(array( 'tweetId' => $data->tweet_id ))

Столбец не найден: 1054 Неизвестный столбец 't0.twitterUser_id' в 'списке полей'

SELECT t0.period AS period1, t0.tweet_id AS tweet_id2, t0.tweet AS tweet3,
t0.url AS url4, t0.retweet_count AS retweet_count5, t0.created_at AS created_at6,
t0.twitterUser_id AS twitterUser_id7
FROM twitter_tweets t0 WHERE t0.tweet_id = ?

Как я могу решить эту проблему? Я пытался установить только @ORM \ JoinColumn (без аннотации JoinTable), но я получаю эту ошибку:

"message": "SQLSTATE [42S02]: базовая таблица или представление не найдены: 1146 Таблица 'database.twittertweets_twittertrends' не существует"

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Решено с помощью Однонаправленного сопоставления многозначных ассоциаций : http://docs.doctrine -project.org / projects / doctrine-orm / en / 2.0.x / reference / association-mapping. HTML # много-к-один-однонаправленный

TwitterTweets сущность:

/**
 * MyBundle\CoreBundle\Entity\TwitterTweets
 *
 * @ORM\Table(name="twitter_tweets")
 * @ORM\Entity
 */
class TwitterTweets
{
    /**
     * @var TwitterUsers
     *
     * @ORM\ManyToOne(targetEntity="TwitterUsers")
     * @ORM\JoinColumn(name="twitter_user_id", referencedColumnName="twitter_id")
     */
    private $twitterUser;
}

TwitterUsers сущность:

/**
 * MyBundle\CoreBundle\Entity\TwitterUsers
 *
 * @ORM\Table(name="twitter_users")
 * @ORM\Entity
 */
class TwitterUsers
{
    // ... no properties needed
}

Спасибо jperovic за помощь:)

0 голосов
/ 16 марта 2012

На самом деле Many-To-Many определяется через @JoinTable. Чтобы определить Many-To-One, вам нужно просто сделать:

/**
     * @var TwitterUsers
     *
     * @ORM\ManyToOne(targetEntity="TwitterUsers", inversedBy="tweets")
     * @ORM\JoinColumn(name="twitter_user_id", referencedColumnName="twitter_id")
     */
...