1

在编写查询或运行结果集时,我经常不得不将字段称为“field_id_X”。我想相信有一种比为每个 field_id/name 对定义一个 CONST 更明智的方法。

define(NAME_FIELD ,'field_id_3');
define(HEIGHT_FIELD, 'field_id_4');

foreach( $result as $row ){
    $name = $row[NAME_FIELD]; // :(
}
4

2 回答 2

2

获取字段 ID 和名称的数组...

function getFieldReferences() {
    $sql = "SELECT field_id, field_name
        FROM exp_channel_fields
       WHERE site_id = ".$this->EE->config->item('site_id');
    $result = $this->EE->db->query($sql);

    if ($result->num_rows() > 0) {
        $result = $result->result_array();
        $finalResult = array();
        foreach ($result as $row)
            $finalResult[$row["field_id"]] = $row["field_name"];

        return $finalResult;
    } else {
        return false;
    }
}

特定条目详细信息的示例转换 $entry_id...

$sql = "SELECT exp_channel_data.*, exp_channel_titles.*, exp_channels.channel_name
          FROM exp_channel_data, exp_channel_titles, exp_channels
         WHERE exp_channel_data.entry_id = $entry_id
           AND exp_cart_products.entry_id = $entry_id
           AND exp_channel_titles.entry_id = $entry_id
         LIMIT = 1";
$result = $this->EE->db->query($sql);
if ($result->num_rows() > 0) {
        $result = $result->result_array();
        $result = $result[0];

        //###   Get Field Titles   ###
        $fieldReferences = getFieldReferences();

        //###   Replace Field ID reference with name   ###
        foreach ($result as $key => $value) {
            if (substr($key,0,9) == "field_id_") {
                $result[$fieldReferences[substr($key,9)]] = $value;
                unset($result[$key]);
            }
            if (substr($key,0,9) == "field_ft_")
                unset($result[$key]);
        }//###   End of foreach   ###
}

根据指定的成员 $id 将成员字段转换为名称...

$sql = "SELECT m_field_id, m_field_name
      FROM exp_member_fields";
$result = $this->EE->db->query($sql);
if ($result->num_rows() > 0) {
    $memberFields = $result->result_array();

    $sql = "SELECT exp_member_data.*, exp_members.email
          FROM exp_member_data, exp_members
         WHERE exp_member_data.member_id = $id
           AND exp_members.member_id = $id
         LIMIT 1";

    $result = $this->EE->db->query($sql);
    if ($result->num_rows() > 0) {
    $result = $result->result_array();
    $rawMemberDetails = $result[0];

    //###   Loop through each Member field assigning it the correct name   ###
    foreach($memberFields as $row)
        $memberDetails[ $row['m_field_name'] ] = $rawMemberDetails['m_field_id_'.$row['m_field_id']];
}
于 2012-06-30T18:00:38.230 回答
0

您可以通过exp_channel_data中的field_id查找exp_channel_fields.field_name(或 field_label)。

于 2012-06-30T15:08:03.520 回答