【问题标题】:Generate xml file from Laravel template从 Laravel 模板生成 xml 文件
【发布时间】:2014-08-23 15:23:22
【问题描述】:

我有一个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

您可能注意到,以下之间的关系:

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

【问题讨论】:

  • XML 非常灵活,就目前而言,您需要在问题中提供更多信息……您能解释一下您的应用程序中的关系吗?你能举例说明生成的 XML 应该是什么样子吗?
  • @msturdy 是的,我可以为您提供所需的所有信息。我需要一个代表我的 laravel 模型的 xml 文件。数据库表有很多列,我需要将这些列提取为 xml 文档。你找到我了吗?

标签: php mysql xml laravel laravel-4


【解决方案1】:

根据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>

【讨论】:

  • 非常好的答案,我会尝试并更新您。但在 1.30 小时后。非常感谢
  • 当我尝试这个时:$xmlDocument = XmlDocument::find(4)-&gt;get()-&gt;toArray(); 我得到了数据库中的所有行,而不仅仅是4 行。然后我尝试了这个$xmlDocument = XmlDocument::find(4)-&gt;toArray();,所以我只得到列而不是关系。我的意思是我只是得到了 id(witch 是表 xmldocument 中的唯一列)。但是,我应该得到其他关系。例如,我与表master_information 有一对多的关系,我没有得到这些值。你能帮忙吗?
  • @AnastasieLaurent - 你能用关系更新你的问题吗?
  • 好的,我给你所有的关系,请等待更新问题
  • 直到现在我有这个代码$xmlDocument = XmlDocument::with('MasterInformation', 'GeneralInformation', 'DetailsAttributes')-&gt;find(4)-&gt;toArray(); 它给了我所有的信息。我仍然需要在这个问题中添加MasterAttribute。我不知道怎么做。那是因为 MasterAttribute 是一对多 MasterInformation 而不是 XmlDocument 你能帮忙吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多