1

ExpressionEngineを使用してサイトにいくつかの変更を加えていますが、理解できない概念があり、メソッドが事前に提供されている回避策をコーディングしている可能性があります。

特にチャンネルとメンバーの場合、元の作成者はいくつかのカスタムフィールドを追加しました。私は、テーブルの各列に特定の意味のある名前が付いている従来のデータベースのバックグラウンドを持っています。また、一意のキーで結合された関連テーブルを追加することで独自のデータを拡張することにも慣れています。ここでも、関連テーブルのフィールド名には意味があります。

ただし、EEでは、カスタムフィールドを追加すると、フィールドがfield_id_xとしてテーブルに作成され、これらが何であるかを示すエントリが別のテーブルに配置されます。

これは、管理者に権限を与えるためのUIの観点からはすべて優れていますが、コードを作成する際の頭痛の種です。

わかりました。テンプレートタグはありますが、私はそれらを使用しない傾向があり、とにかくデータベースクエリには適していません。

たとえばmembersテーブルでクエリを実行し、実際に呼ばれるものとして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;
4

1 に答える 1

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次に、新しい配列を使用します。

于 2012-05-22T15:29:38.860 に答える