我正在学习symbolg-symfony2教程的第5部分:
http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html
标题下:主页-博客和评论
当我更新时:
// src/Blogger/BlogBundle/Repository/BlogRepositoy.php
public function getLatestBlogs($limit = null)
{
$qb = $this->createQueryBuilder('b')
->select('b, c')
->leftJoin('b.comments', 'c')
->addOrderBy('b.created', 'DESC');
if (false === is_null($limit))
$qb->setMaxResults($limit);
return $qb->getQuery()
->getResult();
}
以及当我更新时:
{# src/Blogger/BlogBundle/Resources/views/Page/index.html.twig #}
{# .. #}
<footer class="meta">
<p>Comments: <a href="{{ path('BloggerBlogBundle_blog_show', { 'id': blog.id }) }}#comments">{{ blog.comments|length }}</a></p>
<p>Posted by <span class="highlight">{{ blog.author }}</span> at {{ blog.created|date('h:iA') }}</p>
<p>Tags: <span class="highlight">{{ blog.tags }}</span></p>
</footer>
{# .. #}
然后我刷新浏览器并得到错误:
[Semantical Error] line 0, col 71 near 'c ORDER BY b.created': Error: Class
Blogger'BlogBundle'Entity'Blog has no association named comments
500 Internal Server Error - QueryException
<?php
// src/Blogger/BlogBundle/Entity/Blog.php
namespace Blogger'BlogBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
/**
* @ORM'Entity(repositoryClass="Blogger'BlogBundle'Repository'BlogRepository")
* @ORM'Table(name="blog")
* @ORM'HasLifecycleCallbacks()
*/
class Blog
{
public function __toString()
{
return $this->getTitle();
}
/**
* @ORM'Id
* @ORM'Column(type="integer")
* @ORM'GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM'Column(type="string")
*/
protected $title;
/**
* @ORM'Column(type="string", length=100)
*/
protected $author;
/**
* @ORM'Column(type="text")
*/
protected $blog;
/**
* @ORM'Column(type="string", length="20")
*/
protected $image;
/**
* @ORM'Column(type="text")
*/
protected $tags;
protected $comments;
/**
* @ORM'Column(type="datetime")
*/
protected $created;
/**
* @ORM'Column(type="datetime")
*/
protected $updated;
public function __construct()
{
$this->comments = new ArrayCollection();
$this->setCreated(new 'DateTime());
$this->setUpdated(new 'DateTime());
}
public function setUpdatedValue()
{
$this->setUpdated(new 'DateTime());
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set title
*
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set author
*
* @param string $author
*/
public function setAuthor($author)
{
$this->author = $author;
}
/**
* Get author
*
* @return string
*/
public function getAuthor()
{
return $this->author;
}
/**
* Set blog
*
* @param text $blog
*/
public function setBlog($blog)
{
$this->blog = $blog;
}
/**
* Get blog
*
* @return text
*/
public function getBlog($length = null)
{
if (false === is_null($length) && $length > 0)
return substr($this->blog, 0, $length);
else
return $this->blog;
}
/**
* Set image
*
* @param string $image
*/
public function setImage($image)
{
$this->image = $image;
}
/**
* Get image
*
* @return string
*/
public function getImage()
{
return $this->image;
}
/**
* Set tags
*
* @param text $tags
*/
public function setTags($tags)
{
$this->tags = $tags;
}
/**
* Get tags
*
* @return text
*/
public function getTags()
{
return $this->tags;
}
/**
* Set created
*
* @param datetime $created
*/
public function setCreated($created)
{
$this->created = $created;
}
/**
* Get created
*
* @return datetime
*/
public function getCreated()
{
return $this->created;
}
/**
* Set updated
*
* @param datetime $updated
*/
public function setUpdated($updated)
{
$this->updated = $updated;
}
/**
* Get updated
*
* @return datetime
*/
public function getUpdated()
{
return $this->updated;
}
}
请帮忙解决这个问题。我不知道哪里出错了
感谢
您没有粘贴src/Blogger/BlogBundle/Entity/Blog.php文件。这将有助于解决您的问题。
很可能您没有将注释字段添加到实体中(或者没有正确地对其进行注释)。
类似的问题:教条2:这些实体之间的关联出了什么问题?
编辑:现在当你粘贴你的实体时,我可以看到注释字段没有注释。Doctrine的实体经理对此一无所知。你必须提供映射(在你的情况下,通过注释)。
编辑2:
在你的实体中,你应该有(src/Blogger/BlogBundle/entity/Blog.php):
/**
* @ORM'OneToMany(targetEntity="Comment", mappedBy="blog")
*/
protected $comments;
但你有:
protected $comments;
缺少映射。教条不知道如何使用你的领域。
我也学习了symbolg教程。我的blog.php文件如下:
<?php
namespace Blogger'BlogBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
/**
* Blogger'BlogBundle'Entity'Blog
*/
class Blog
{
/**
* @var integer $id
*/
private $id;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @var string $title
*/
private $title;
/**
* @var string $author
*/
private $author;
/**
* @var string $blog
*/
private $blog;
/**
* @var string $image
*/
private $image;
/**
* @var string $tags
*/
private $tags;
/**
* @var string $comment
*/
private $comment;
/**
* @var datetime $created
*/
private $created;
/**
* @var datetime $updated
*/
private $updated;
public function __construct()
{
$this->comments = new ArrayCollection();
$this->setCreated(new 'DateTime());
$this->setUpdated(new 'DateTime());
}
/**
* Set title
*
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
$this->setSlug($this->title);
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set author
*
* @param string $author
*/
public function setAuthor($author)
{
$this->author = $author;
}
/**
* Get author
*
* @return string
*/
public function getAuthor()
{
return $this->author;
}
/**
* Set blog
*
* @param string $blog
*/
public function setBlog($blog)
{
$this->blog = $blog;
}
/**
* Get blog
*
* @return string
*/
public function getBlog($length = null)
{
if (false === is_null($length) && $length > 0)
return substr($this->blog, 0, $length);
else
return $this->blog;
}
/**
* Set image
*
* @param string $image
*/
public function setImage($image)
{
$this->image = $image;
}
/**
* Get image
*
* @return string
*/
public function getImage()
{
return $this->image;
}
/**
* Set tags
*
* @param string $tags
*/
public function setTags($tags)
{
$this->tags = $tags;
}
/**
* Get tags
*
* @return string
*/
public function getTags()
{
return $this->tags;
}
/**
* Set comment
*
* @param string $comment
*/
public function setComment($comment)
{
$this->comment = $comment;
}
/**
* Get comment
*
* @return string
*/
public function getComment()
{
return $this->comment;
}
/**
* Set created
*
* @param datetime $created
*/
public function setCreated($created)
{
$this->created = $created;
}
/**
* Get created
*
* @return datetime
*/
public function getCreated()
{
return $this->created;
}
/**
* Set updated
*
* @param datetime $updated
*/
public function setUpdated($updated)
{
$this->updated = $updated;
}
/**
* Get updated
*
* @return datetime
*/
public function getUpdated()
{
return $this->updated;
}
public function addComment(Comment $comment)
{
$this->comments[] = $comment;
}
public function getComments()
{
return $this->comments;
}
/**
* @ORM'preUpdate
*/
public function setUpdatedValue()
{
$this->setUpdated(new 'DateTime());
}
/**
* @var Blogger'BlogBundle'Entity'Comment
*/
private $comments;
public function __toString()
{
return $this->getTitle();
}
/**
* @var string $slug
*/
protected $slug;
/**
* Set slug
*
* @param string $slug
*/
public function setSlug($slug)
{
$this->slug = $this->slugify($slug);
}
/**
* Get slug
*
* @return string
*/
public function getSlug()
{
return $this->slug;
}
public function slugify($text)
{
$text = preg_replace('#[^''pL'd]+#u', '-', $text);
$text = trim($text, '-');
if (function_exists('iconv'))
{
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
}
$text = strtolower($text);
$text = preg_replace('#[^-'w]+#', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
} }
希望这对你有帮助。
您的代码缺少
/**
* @var Blogger'BlogBundle'Entity'Comment
*/
private $comments;
也许您也遇到过同样的问题。
如果你了解你的人际关系,一切都很好。
我的解决方案:
Cache clear :)