Cakephp 1.3: Как перейти в мою статью Tabel - Функция - PullRequest
0 голосов
/ 18 января 2012

У меня есть приложение, которое использовало другую систему php cms, которую я сейчас переношу в CakePHP 1.3.Я пришел к тому, что мне нужно перенести все мои старые статьи из tblnewsarticles в мою новую таблицу CakePHP articles.Таблицы имеют разные поля, но я смог сопоставить все те, что мне нужны, с моей новой таблицей.Я создал следующую временную функцию migrate в моем ArticlesController class, чтобы выполнить эту операцию для меня, но не могу сохранить данные в моей таблице.Кажется, все в порядке, в том числе я провел тесты с debug($data) и debug($articles), и он показывает данные, но я ничего не могу сохранить.Я не вижу ничего плохого в этом, поэтому любая помощь приветствуется ...

//TEMPORARY FUNCTION THAT WILL BE DELETED/DEACTIVATED AFTER MIGRATION
function migrate(){                
        // FOR TESTING PURPOSES I SET LIMIT=1, BUT I HAVE OVER 4000 ARTICLES TO TRANSFER
    $articles = $this->Article->query(
        "SELECT articleID,subcategoryID,article_title,article_html,article_date,image_extension FROM tblnewsarticles LIMIT 1;"
    );

    foreach($articles as $article){
        $data['Article']['id'] = $article['tblnewsarticles']['articleID'];
        $data['Article']['published'] = 1;
        $data['Article']['title'] = $article['tblnewsarticles']['article_title'];
        $data['Article']['body'] = $article['tblnewsarticles']['article_html'];
        $data['Article']['main_image'] = 'cat_'.$article['tblnewsarticles']['subcategoryID'].'/'.$article['tblnewsarticles']['articleID'].'.'.$article['tblnewsarticles']['image_extension'];
        $data['Article']['category_id'] = $article['tblnewsarticles']['subcategoryID'];
        $data['Article']['user_id'] = 2;
        $data['Article']['created'] = $article['tblnewsarticles']['article_date'];

        if (!empty($data)) {
             $this->Article->create();
             $this->Article->save($data);                       
             $this->Session->setFlash('Migration processed successfully');
        }else{                      
             $this->Session->setFlash('Unsuccessful');
        }
    }   
}

======== Это то, что я сделал, чтобы работал для меня ================

function migrateArticle(){

$articles = $this->Article->query(
                    "SELECT articleID,subcategoryID,article_title,article_html,article_date,image_extension FROM tblnewscategories;"
    );

    foreach($articles as $article){

    $categoryID = $article['tblnewsarticles']['subcategoryID'];
    $articleID = $article['tblnewsarticles']['articleID'];
    $articleTitle = $article['tblnewsarticles']['article_title'];
    $articleSlug = str_replace(" ","-",strtolower($articleTitle));
    $articleBody = $article['tblnewsarticles']['article_html'];
    $articleImage = 'cat_'.$article['tblnewsarticles']['subcategoryID'].'/'.$article['tblnewsarticles']['articleID'].'.'.$article['tblnewsarticles']['image_extension'];
    $articleDate = $article['tblnewsarticles']['article_date'];

   $this->Article->query("INSERT INTO categories (id, published, title, slug, body, main_image, category_id, user_id, created) VALUES('$articleID', '1', '$articleTitle', '$articleSlug', '$articleBody', '$articleImage', '$categoryID', '2', '$articleDate');");   
    }   
}

1 Ответ

1 голос
/ 18 января 2012

Не пытайтесь загрузить 4000 записей одновременно, а затем обрабатывать их по отдельности.Вероятно, проще с одним запросом к базе данных, который копирует все.Что-то вроде

INSERT INTO articles
    (id, published, title, body,
     main_image,
     category_id, user_id, created)
    SELECT articleID, 1, article_title, article_html,
          CONCAT('cat_', subcategoryID, '/', articleID, '.', image_extension),
          subcategoryID, 2, article_date
    FROM tblnewsarticles;

(конечно, не проверено)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...