Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Idiorm和Paris仅通过一个查询从关联表中检索信息?_Php_Orm_Idiorm - Fatal编程技术网

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 %}