我正在使用ExpressionEngine对网站进行一些更改,有一个我似乎无法理解的概念,并且可能编写了预先提供方法的解决方法。
特别是对于频道和成员,原始创建者添加了多个自定义字段。我来自传统的数据库背景,其中表中的每一列都有一个特定的有意义的名称。我还习惯通过添加一个与唯一键连接的相关表来扩展专有数据,同样,相关表中的字段名称也是有意义的。
但是,在EE中,当您添加自定义字段时,它会在表中将它们创建为field_id_x,并将一个条目放入另一个表中,告诉您这些是什么。
现在,从UI的角度来看,这对管理员来说是一件好事,但在编写任何代码时这都是一件令人头疼的问题。
好的,有模板标签,但我倾向于不使用它们,无论如何它们都不适合数据库查询。
有没有一种简单的方法可以对成员表进行查询,然后将m_field_1称为真正的名称 - 在我的情况下是“addresslonglat”。
我正在处理的表中有很多这些字段,目前我用固定名称解决它们,例如“m_field_id_73”,这意味着什么。
有人知道一种简单的方法可以轻松地将数据及其字段名称组合在一起吗?
理想情况下,我想做以下事情:
$result = $this->EE->db->query("select * from exp_member_data where member_id = 123")->row();
echo $result->addresslonglat;
而不是
echo $result->m_field_id_73;
答案 0 :(得分:1)
这应该适合你:
<?php
$fields = $data = array();
$member_fields = $this->EE->db->query("SELECT m_field_id, m_field_name FROM exp_member_fields");
foreach($member_fields->result_array() as $row)
{
$fields['m_field_id_'.$row['m_field_id']] = $row['m_field_name'];
}
$member_data = $this->EE->db->query("SELECT * FROM exp_member_data WHERE member_id = 1")->row();
foreach($member_data as $k => $v)
{
if($k != 'member_id')
{
$data[$fields[$k]] = $v;
}
}
print_r($data);
?>
然后只使用新的$data
数组。