如何在一个查询中获取关系字段数据

How to get relational fields data in one single query

我想优化我网站的速度并在一个查询中获取所有数据,包括我的关系(选择)字段数据。怎么做?

目前我的发现如下:

我注意到在执行 $pod->field('relational_field'); 时,额外的查询将 运行。

假设一个 pod 有一个 name 字段 和一个 categories 字段,它是 relational(选择):

// This code below will behave unexpected 
$pod = pods( 'pod', array(
   'where' => array(...),
   'select' => array('t.name', 'category.name AS category_name')
));

假设您已经创建了 一个链接到两个类别的 Pod 项目,您将得到 两个结果,因为 category.name AS category_name 在 select 选项中。如果您为广告连播分配了一个类别,您将获得一个结果。

结果如下:

array (size=2)
  0 => 
    object(stdClass)[2928]
      public 'name' => string 'My pod 1' (length=8)
      public 'category' => string 'Category 1' (length=10)
  1 => 
    object(stdClass)[2929]
      public 'name' => string 'My pod 1' (length=8)
      public 'category' => string 'Category 2' (length=10) // <-- The difference is only in category

我真正想要的是那个'category'键里面的两个分类的数据作为一个数组。这可能吗?

(最初发布于 Pods.io

这很接近。 'select' 参数应该是提供给 SQL SELECT 子句的字符串,而不是字段数组。与 'where' 参数相同,因此:

$pod = pods( 'pod', array(
   'where' => 'where params as a string',
   'select' => 't.name,category.name AS category_name')
));

当您使用 field()display() 检索数据时,请使用别名 'category_name' 而不是点符号。