我正在使用 knp paginator 包,但出现此错误 There is no such field [catalogId] in the given Query component, aliased by [u] 。如果我点击标题,排序工作正常,但如果我点击 catalogid,它会显示错误。CatalogId 是 ManytoOne 关系。我用谷歌搜索了答案,但似乎对我没有任何帮助。你能告诉我如何解决这个问题吗? ?
这是我的 Controller :
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$postData = $request->query->all();
$form = $this->createForm(new SkuInventoryType(), new SkuInventory());
$form->handleRequest($request);
if($postData){
$repo = $this->getDoctrine()->getRepository('RetailMappingCatalogBundle:SkuInventory');
//dump($repo);die;
$skuQuery = $repo->createQueryBuilder('u')
->orderBy($postData['sort'],$postData['direction']);
}else{
$skuQuery = $em->getRepository('RetailMappingCatalogBundle:SkuInventory:u')->findAll();
}
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$skuQuery,
$request->query->get('page', 1),
15
);
if ($form->isSubmitted() && $form->isValid())
{
$data = $form->getData();
$data->setCreatedBy($this->getUser());
$data->setUpdatedBy($this->getUser());
$em->persist($data);
$em->flush();
$alertMessage = $this->get('retail_mapping.alert_message');
$alertMessage->success('SKU Inventory Created');
return $this->redirect($this->generateUrl('sku_inventory'));
}
return $this->render('User/SkuInventory/index.html.twig',[
'form' => $form->createView(),
'pagination' => $pagination,
]);
}
这是我的观点:
<table class="table table-bordered table-striped">
<tr>
<th>Id</th>
<th{% if pagination.isSorted('u.title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Title', 'u.title') }}</th>
<th{% if pagination.isSorted('u.catalogId') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'SKU', 'u.catalogId') }}</th>
<th>Actions</th>
</tr>
{% for sku in pagination %}
<tr>
<td>{{ loop.index }}</td>
<td>{{ sku.title}}</td>
<td> {{sku.catalogId.title}}</td>
<td><a class="btn btn-primary" href="{{path('sku_inventory_edit',{'id': sku.id})}}">Edit</a>
<a class="btn btn-primary" href="{{path('sku_inventory_delete',{'id': sku.id})}}">Delete</a></td>
</tr>
{% endfor %}
</table>
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
最佳答案
经过一番摸索,我终于找到了答案。 这是我的 Controller
public function indexAction(Request $request)
{
$breadcrumbs = $this->get("white_october_breadcrumbs");
$breadcrumbs->addItem("Sku Inventory", $this->get("router")->generate("index"));
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new SkuInventoryType(), new SkuInventory());
$form->handleRequest($request);
$repo = $em->getRepository('RetailMappingCatalogBundle:SkuInventory')->findAllCatalog();
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$repo,
$request->query->get('page', 1),
15
);
if ($form->isSubmitted() && $form->isValid())
{
$data = $form->getData();
$data->setCreatedBy($this->getUser());
$data->setUpdatedBy($this->getUser());
$em->persist($data);
$em->flush();
$alertMessage = $this->get('retail_mapping.alert_message');
$alertMessage->success('SKU Inventory Created');
return $this->redirect($this->generateUrl('sku_inventory'));
}
return $this->render('User/SkuInventory/index.html.twig',[
'form' => $form->createView(),
'pagination' => $pagination,
]);
}
这是我的仓库:
public function findAllCatalog()
{
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb->select('c')
->from('RetailMappingCatalogBundle:SkuInventory', 'c')
->Join('c.catalogId', 'cl')
->orderBy('c.id', 'DESC');
//dump($qb->getQuery());die;
return $qb->getQuery();
}
这是我的观点:
<table class="table table-bordered table-striped">
<tr>
<th>Id</th>
<th{% if pagination.isSorted('c.title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Title', 'c.title') }}</th>
<th{% if pagination.isSorted('cl.catalogId.title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'SKU', 'cl.catalogId.title') }}</th>
<th>Actions</th>
</tr>
{% for sku in pagination %}
<tr>
<td>{{ loop.index }}</td>
<td>{{ sku.title}}</td>
<td> {{sku.catalogId.title}}</td>
{{ dump(sku) }}
{#}<td> {{sku.catalogId.title}}</td>{#}
<td><a class="btn btn-primary" href="{{path('sku_inventory_edit',{'id': sku.id})}}">Edit</a>
<a class="btn btn-primary" href="{{path('sku_inventory_delete',{'id': sku.id})}}">Delete</a></td>
</tr>
{% endfor %}
</table>
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
关于php - 排序在 Knp 分页器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120352/
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b
例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果
这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw
你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva