Php 条令2多通映射注释
TwitterTweets实体:Php 条令2多通映射注释,php,symfony,doctrine-orm,mysql-error-1146,Php,Symfony,Doctrine Orm,Mysql Error 1146,TwitterTweets实体: /** * MyBundle\CoreBundle\Entity\TwitterTweets * * @ORM\Table(name="twitter_tweets") * @ORM\Entity */ class TwitterTweets { /** * @var TwitterUsers * * @ORM\ManyToOne(targetEntity="TwitterUsers", inversedBy="t
/**
* 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;
}
/**
* 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
{
/**
* @var TwitterTweets
*
* @ORM\OneToMany(targetEntity="TwitterTweets", mappedBy="twitterUser")
*/
private $tweets;
}
/**
* MyBundle\CoreBundle\Entity\TwitterUsers
*
* @ORM\Table(name="twitter_users")
* @ORM\Entity
*/
class TwitterUsers
{
// ... no properties needed
}
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_用户表:
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;
我在执行简单的选择时遇到此错误:
$this->getDoctrine()->getRepository('MyBundleCoreBundle:TwitterTweets')->findOneBy(array( 'tweetId' => $data->tweet_id ))
未找到列:“字段列表”中的1054未知列“t0.twitterUser\u 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]:未找到基表或视图:1146表”数据库。twittertweets\u twittertrends“不存在”实际上
多对多是通过@JoinTable
定义的。要定义多对一
,只需执行以下操作:
/**
* @var TwitterUsers
*
* @ORM\ManyToOne(targetEntity="TwitterUsers", inversedBy="tweets")
* @ORM\JoinColumn(name="twitter_user_id", referencedColumnName="twitter_id")
*/
使用多对一单向关联映射解决:
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;
}
/**
* 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
{
/**
* @var TwitterTweets
*
* @ORM\OneToMany(targetEntity="TwitterTweets", mappedBy="twitterUser")
*/
private $tweets;
}
/**
* MyBundle\CoreBundle\Entity\TwitterUsers
*
* @ORM\Table(name="twitter_users")
* @ORM\Entity
*/
class TwitterUsers
{
// ... no properties needed
}
感谢jperovic的帮助:)谢谢你的帮助,但正如我之前写的那样,我试图只设置@ORM\JoinColumn(与你的示例完全相同),但它不起作用:“message:“SQLSTATE[42S02]:找不到基表或视图:1146 table'数据库。twittertweets\u twittertrends'不存在”,我不知道我是瞎子还是什么,但我完全错过了你问题的最后一部分,你在那里写的关于@JoinColumn
。很抱歉。你能用你放在实体顶部的@Table
注释更新你的问题吗?我怀疑您可能拼错了表名,或者根本没有放注释……我现在已经在实体的顶部添加了表注释。我想他们是对的。提前谢谢!!是的,这些似乎是正确的。我看不出twittertrends表名后缀的来源。尽管这两个实体都属于同一名称空间,但您是否可能有其他同名实体(显然是来自其他名称空间)?