我目前正在通过FOQElasticaBundle在我的Symfony2应用程序中实现elasticsearch,到目前为止,它基于应用于我的"Story"实体的各个领域的提升而工作得很好.这是配置:
foq_elastica:
clients:
default: { host: localhost, port: 9200 }
indexes:
website:
client: default
types:
story:
mappings:
title: { boost: 8 }
summary: { boost: 5 }
text: { boost: 3 }
author:
persistence:
driver: orm # orm, mongodb, propel are available
model: Acme\Bundle\StoryBundle\Entity\Story
provider:
query_builder_method: createIsActiveQueryBuilder
listener:
service: acme_story.search_index_listener
finder:
Run Code Online (Sandbox Code Playgroud)
然而,我还想根据故事的"published_at"日期应用提升,以便昨天发布的故事会出现在6个月前发布的故事之前的结果中 - 即使旧故事得分略高(显然这需要一些调整).这可能吗?
如果有人能让我知道如何使用FOQElasticaBundle来实现这一点,那将是很好的,但是如果你能让我知道如何在elasticsearch中直接实现这一点我会很感激,所以我可以尝试自己实现这个行为并为此做出贡献如果需要捆绑.
谢谢.
我目前正面临着SonataAdminBundle的挑战,一对多的关系和文件上传.我有一个实体叫Client
,一个叫ExchangeFile
.一个人Client
可以有几个ExchangeFile
,所以我们在这里有一对多的关系.我正在使用VichUploaderBundle进行文件上传.
这是Client
班级:
/**
* @ORM\Table(name="client")
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks
*/
class Client extends BaseUser
{
// SNIP
/**
* @ORM\OneToMany(targetEntity="ExchangeFile", mappedBy="client", orphanRemoval=true, cascade={"persist", "remove"})
*/
protected $exchangeFiles;
// SNIP
}
Run Code Online (Sandbox Code Playgroud)
这是ExchangeFile
班级:
/**
* @ORM\Table(name="exchange_file")
* @ORM\Entity
* @Vich\Uploadable
*/
class ExchangeFile
{
// SNIP
/**
* @Assert\File(
* maxSize="20M"
* )
* @Vich\UploadableField(mapping="exchange_file", fileNameProperty="fileName")
*/
protected $file;
/**
* @ORM\Column(name="file_name", type="string", nullable=true)
*/
protected $fileName;
/** …
Run Code Online (Sandbox Code Playgroud) 我试图寻找这个错误但事实上我没有找到任何东西让我相信我做的事情很傻.我将在下面包含相关代码,但基本上我使用多表继承(或类表继承)并尝试使用Doctrine ORM findBy()方法基于discriminator列进行查询,这导致以下ORMException被抛出:"无法识别的字段:类型".
以下是触发异常的代码:
// $this->em is an instance of \Doctrine\ORM\EntityManager
$repository = $this->em->getRepository('JoeCommentBundle:Thread');
return $repository->findOneBy(array(
'type' => $this->type,
'related_id' => $id
));
Run Code Online (Sandbox Code Playgroud)
以下是"基础"抽象实体的相关代码:
<?php
namespace Joe\Bundle\CommentBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="comment_threads")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap( {"story" = "Joe\Bundle\StoryBundle\Entity\StoryThread"} )
*/
abstract class Thread
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="related_id", type="integer")
*/
protected $relatedId;
/** MORE FIELDS …
Run Code Online (Sandbox Code Playgroud) 我正在使用doctrine继承映射来将各种对象链接到注释实体.这是通过各种具体的"线程"实现的,这些"线程"与注释具有一对多的关系.因此,以"故事"元素为例,会有一个相关的"StoryThread"实体,它可以有很多注释.
这一切都运行正常,但是我在为SonataAdminBundle定义一个可以用作父实体的子级的CommentAdmin类时遇到了麻烦.例如,我希望能够使用以下路由:
/admin/bundle/story/story/1/comment/list
/admin/bundle/media/gallery/1/comment/list
有没有人有任何关于如何实现这一目标的指示?我想发布一些代码摘录,但我没有设法找到任何相关的文档,所以不知道最好的起点.
我一直在尝试使用SonataNewsBundle作为参考,因为他们在帖子和评论之间实现了类似的父/子管理员关系,但似乎这依赖于'评论'(子)管理员类被硬编码到知道它属于帖子,它似乎也需要与父对象有直接的多对一关系,而我的是通过一个单独的"线程"实体.
我希望这是有道理的!谢谢你的帮助.
我最近将我的Symfony2应用程序升级到2.1并将其迁移到新服务器,因此我认为我将配置Capifony以使部署更简单.一切都变得很好,除了它现在没有使用APCLoader的事实,所以我不得不暂时评论它,直到它被排序.
以下是相关代码app.php
:
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
// Use APC for autoloading to improve performance.
// Change 'sf2' to a unique prefix in order to prevent cache key conflicts
// with other applications also using APC.
$loader = new ApcClassLoader('my_prefix', $loader);
$loader->register(true);
Run Code Online (Sandbox Code Playgroud)
问题是'my_prefix'
每个版本不是唯一的,因此它最终会尝试查找属于以前版本的缓存文件,这些文件可能存在也可能不存在.这显然是一个非常大的问题!
什么是最好的解决方案?我应该以某种方式编写一个在部署之前运行capifony的任务,将前缀更改为唯一的东西,例如#{latest_release}
变量?或者我应该在每次部署后以某种方式重置APC缓存的全部内容?
我不太确定做这些事情的最佳方法,所以如果你推荐其中一个可以请你指出正确的方向来实现它吗?或者有没有我想到的替代解决方案?
嗨想要在两个实体之间建立联接.实体位于不同的数据库中:
以下是我设置数据库配置的方法:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
mapping_types:
enum: string
data_warehouse:
driver: %database_data_warehouse_driver%
host: %database_data_warehouse_host%
port: %database_data_warehouse_port%
dbname: %database_data_warehouse_name%
user: %database_data_warehouse_user%
password: %database_data_warehouse_password%
charset: UTF8
mapping_types:
enum: string
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
MyBundle1: ~
data_warehouse:
connection: data_warehouse
mappings:
MyBundle2: ~
Run Code Online (Sandbox Code Playgroud)
这些是我的实体:
namespace My\Bundle1\Entity;
use My\Bundle1\Entity\MyBundle2Entity;
class MyBundle1Entity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id …
Run Code Online (Sandbox Code Playgroud) 是否有可能在Sonata Admin Bundle Form中添加不同的字段,具体取决于您是在创建新实体还是在configureFormFields中编辑现有实体?
symfony ×7
php ×6
doctrine-orm ×2
sonata-admin ×2
admin ×1
apc ×1
capifony ×1
forms ×1
mode ×1