从Laravel模板生成xml文件

时间:2014-07-02 17:53:41

标签: php mysql xml laravel laravel-4

我有一个Laravel模板,我想根据它生成一个XML文件。

例如,结构具有名称,XPath和类型。所以XML应该是这样的:

<name>
</name>
<type>
</type>
<xpath>
</xpath>

当然,我正在寻找能够处理人际关系的更复杂的事情。

有没有这方面的工具?

我正在使用MySQL,所以也许有一个工具呢?或者也许是PHP脚本?

我已经尝试过搜索,我发现的所有工具都是从XSD生成HTML表单和从XSD生成通用XML的工具。

更新

表及其列是:

  1. xml_document表格,其中包含列:id
  2. general_information表包含列:idxml_document_iddomainstart_url和`category
  3. master_information表包含列:idxml_document_idcontainernext_page
  4. master_attribute表包含列:idmaster_information_idnamexpathtype
  5. details_attribute表包含列:idxml_document_idtype
  6. 您可能会注意到:

    之间的关系
    1. xml_document和master_information是一对一的。
    2. xml_document和general_information是一对一的。
    3. xml_document和details_attribute是一对多。
    4. master_information和master_attribute是一对多

1 个答案:

答案 0 :(得分:6)

根据Laravel Documentation,集合及其关系可以输出到数组:

$roles = User::find(1)->roles->toArray();

例如,我有两个型号,UserPhone,以及一个用户hasMany()手机。

    users                  phones
    +----+--------+        +----+-----------+---------+
    | id | name   |        | id | number    | user_id |
    +----+--------+        +----+-----------+---------+
    |  1 | user 1 |        |  1 | 111111111 |       1 |
    |  2 | user 2 |        |  2 | 222222222 |       2 |
    +----+--------+        |  3 | 333333333 |       1 |
                           +----+-----------+---------+

我们可以使用toArray()方法返回一个数组,并with()提取所有相关的Phones

$users = User::with('phones')->get()->toArray();

给出这个(我有hidden模型中的一些字段用于此答案的目的)

  Array (
    [0] => Array (
            [id] => 1
            [name] => user 1
            [phones] => Array (
                    [0] => Array (
                            [id] => 1
                            [number] => 111111111
                            [user_id] => 1
                        )

                    [1] => Array (
                            [id] => 3
                            [number] => 333333333
                            [user_id] => 1
                        )
                )    
        )    
    [1] => Array (
            [id] => 2
            [name] => user 2
            [phones] => Array (
                    [0] => Array (
                            [id] => 2
                            [number] => 222222222
                            [user_id] => 2
                        )    
                )    
        )    
)

然后,您可以使用各种方法将数组转换为XML。这是我从another answer on SO

取消的
function array_to_xml(array $arr, SimpleXMLElement $xml)
{
    foreach ($arr as $k => $v) {
        is_array($v)
            ? array_to_xml($v, $xml->addChild($k))
            : $xml->addChild($k, $v);
    }
    return $xml;
}

示例输出:

<?xml version="1.0"?>
<root><0><id>1</id><name>user 1</name><phones><0><id>1</id><number>111111111</number><user_id>1</user_id></0><1><id>3</id><number>333333333</number><user_id>1</user_id></1></phones></0><1><id>2</id><name>user 2</name><phones><0><id>2</id><number>222222222</number><user_id>2</user_id></0></phones></1></root>