Cakephp XML для массива в базу данных - PullRequest
0 голосов
/ 02 августа 2011

это первый раз, когда используются функции XML CakePHP.

Я настроил эту модель:

<?php
class Importer extends AppModel {
    var $name = 'Importer';
    var $useTable = false;

    function import_deals(){
        // import XML class
        App::import('Xml');

        // your XML file's location
        $file = "../webroot/files/datafeed_114532.xml";

        // now parse it
        $parsed_xml =& new XML($file);
        $parsed_xml = Set::reverse($parsed_xml); // this is what i call magic

        // see the returned array
        debug($parsed_xml);
    }
}

Контроллер:

<?php
class ImporterController extends AppController {

    var $name = 'Importer';
    var $uses = array('Importer', 'City', 'Deal', 'Partner');

    function import_deals($parsed_xml) {
        $this->loadModel('Importer');
        $deals = $this->Importer->find('all');

        $this->set('deals', $deals);
    }
}

Я видне уверен, потому что я в основном хочу поместить данные XML в базу данных.Массив XML выглядит следующим образом:

Array (
    [MerchantProductFeed] => Array (
        [Merchant] => Array (
            [0] => Array (
                [id] => 2891
                [Prod] => Array (
                    [0] => Array (
                        [id] => 175029851
                        [web_offer] => yes
                        [Text] => Array (
                            [name] => London South: 60%   Off Takeaways From Just-Eat
                            [desc] => £6 for £15 Worth of Takeaways From Over 1000 London Eateries with Just-Eat
                            [promo] => 60 %
                        )
                        [Uri] => Array (
                            [awTrack] => http://www.awin1.com/pclick.php?p=175029851&a=114532&m=2891
                            [mImage] => http://static.groupon.co.uk/44/30/1311759403044.jpg
                        )
                        [Price] => Array (
                            [rrp] => 15.00
                        )
                        [Cat] => Array (
                            [awCatId] => 100
                            [awCat] => Bodycare & Fitness
                            [mCat] => Deals
                        )
                        [brand] => Array ()
                        [valFrom] => 2011-07-29
                        [valTo] => 2011-10-29
                    )
                    [1] => Array (
                        [id] => 175030161
                        [web_offer] => yes
                        [Text] => Array (
                            [name] => Essex: Up to 70% Off Treatment and Cut and Blowdry OR Half Head Highlights or Colour
                            [desc] => Cut, Blow Dry and Paul Mitchell Treatment (£18) Or Add Half Head of Highlights or Colour (£34) at Cube (Up to 70% Saving)
                            [promo] => 70 %
                        )
                        [Uri] => Array (
                            [awTrack] => http://www.awin1.com/pclick.php?p=175030161&a=114532&m=2891
                            [mImage] => http://static.groupon.co.uk/53/51/1311615285153.jpg
                        )
                        [Price] => Array (
                            [rrp] => 60.00
                        )
                        [Cat] => Array (
                            [awCatId] => 100
                            [awCat] => Bodycare & Fitness
                            [mCat] => Deals
                        )
                        [brand] => Array ()
                        [valFrom] => 2011-07-29
                        [valTo] => 2011-10-28
                    )
                    ....

Любая помощь будет признательна, даже если вы можете указать мне правильное направление :) Спасибо, ребята

Дейв

1 Ответ

0 голосов
/ 02 августа 2011

Вам не нужна модель импортера

var $uses = array('City', 'Deal', 'Partner');
 function import_deals() {
   App::import('Xml');
   $file = "../webroot/files/datafeed_114532.xml";
   $xml_obj =& new XML($file);
   $parsed_xml = Set::reverse($xml_obj); 
   // set up the data here and save
}

По сути, если данные xml не имеют тот же формат, что и таблицы базы данных (что, как я полагаю, основано на ваших данных), вам придется пройти через $ parsed_xml, чтобы создать правильный формат данных для сохранения в твоя модель Я не знаю схему ваших таблиц, так что это общее направление.

...