Php 如何使用Idiorm和Paris仅通过一个查询从关联表中检索信息?
我正在使用(这是建立在上面的) 我有以下模型类(示例灵感来源于): 但我也想做以下几点:Php 如何使用Idiorm和Paris仅通过一个查询从关联表中检索信息?,php,orm,idiorm,Php,Orm,Idiorm,我正在使用(这是建立在上面的) 我有以下模型类(示例灵感来源于): 但我也想做以下几点: $posts = Model::factory('Post')->find_many(); foreach ($posts as $post) { echo($post->user()->find_one()->username); // generates a query each iteration } 不幸的是,这会为每个迭代创建一个查询。有没有办法告诉Paris或
$posts = Model::factory('Post')->find_many();
foreach ($posts as $post) {
echo($post->user()->find_one()->username); // generates a query each iteration
}
不幸的是,这会为每个迭代创建一个查询。有没有办法告诉Paris或Idorm在第一个find\u many查询中获取相关信息
您应该如何使用Paris检索信息以最小化查询数量?我不想手动指定连接条件(这就是我使用Paris而不是Idiorm的原因)我是Paris和Idiorm项目的当前维护者。不幸的是,您在这里描述的是一个定制查询的案例,而不是Paris曾经用来解决的问题。Paris和Idiorm的理念是尽可能地坚持80/20原则,您的用例在20中
知道你最终是如何解决这个问题的将是一件很有趣的事情。我遇到了完全相同的问题,最终得到了这个(有点难看的)解决方案:
$posts = Model::factory('Post')...->limit($perpage)->find_many();
$user_ids = $user_lookup = array();
foreach($posts as $post) $user_ids[] = $post->user_id;
$users = Model::factory('User')->where_id_in($user_ids)->find_many();
foreach($users as $user) $user_lookup[$user->id] = $user;
只有2个选择。稍后在模板中:
{% for post in posts %}
<h2>{{ post.title }}</h2>
by author: {{ user_lookup[post.user_id].username }}
{% endfor %}
{%for posts in posts%}
{{post.title}}
作者:{{user\u lookup[post.user\u id].username}
{%endfor%}
但是,只有在一个页面上没有显示数百篇帖子的情况下,它才会起作用。到目前为止,我只是解决了这个问题。在一个项目中,我只是切换到Rails。在另一个项目中,我混合使用了Idiorm和Paris,所有复杂的请求都是通过Idiorm中的连接完成的。我真的不喜欢把白痴和巴黎混为一谈,所以我可能会回来解决这个问题+1用于维护项目。
$posts = Model::factory('Post')...->limit($perpage)->find_many();
$user_ids = $user_lookup = array();
foreach($posts as $post) $user_ids[] = $post->user_id;
$users = Model::factory('User')->where_id_in($user_ids)->find_many();
foreach($users as $user) $user_lookup[$user->id] = $user;
{% for post in posts %}
<h2>{{ post.title }}</h2>
by author: {{ user_lookup[post.user_id].username }}
{% endfor %}