如何在一个查询中获取关系字段数据
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' 而不是点符号。
我想优化我网站的速度并在一个查询中获取所有数据,包括我的关系(选择)字段数据。怎么做?
目前我的发现如下:
我注意到在执行 $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' 而不是点符号。