2012-01-17 10 views
0

私は今、別のphp cmsシステムを使っているアプリケーションを持っています。私はこれをCakePHP 1.3に移しています。私はtblnewsarticlesのすべての私の古い記事を私の新しいCakePHPテーブルarticlesに転送する必要があると思っています。テーブルには異なるフィールドがありますが、必要なテーブルをすべて新しいテーブルにマップできました。 ArticlesController classに私のためにこの操作を実行するために次の一時的なmigrate関数を作成しましたが、私のテーブルに保存するデータはありません。私はdebug($data)debug($articles)でテストを行い、データを表示していますが、何も保存することはできません。私は、これは私が私のために働いた何をしたかIS ======== ...Cakephp 1.3:私の記事に移行する方法Tabel - Function

//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

は、理由だけではなく、データベースレベルでこれをしませんか?おそらくコードははるかに少ないでしょう。 –

+0

データベースレベル?申し訳ありませんが、どういう意味ですか? –

+0

これは..thanks –

答えて

1

すべてを一度に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; 

のようなもの(もちろん、テストされていない)

+0

あなたの提案に基づいて、ありがとうArjan、私は必要なものを達成することができました....ありがとうございました... EDITで私の質問を参照してください –

関連する問題