gpt4 book ai didi

php - Doctrine 2 ManyToOne 映射注解

转载 作者:可可西里 更新时间:2023-11-01 01:06:28 25 4
gpt4 key购买 nike

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;
}

twitter_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 注释)但我得到这个错误:

“消息”:“SQLSTATE[42S02]:未找到基表或 View :1146 表‘database.twittertweets_twittertrends’不存在”

最佳答案

使用多对一单向关联映射解决:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html#many-to-one-unidirectional

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 的帮助:)

关于php - Doctrine 2 ManyToOne 映射注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com