2012-11-23 4 views
0

J'adapte StationWagon (application FuelPHP) et jusqu'à présent cela fonctionne très bien.Envoi de données à 2 tables MySQL - FuelPHP/PHP

Je l'ai adapté (avec de l'aide) pour permettre le chargement de plusieurs images sur le serveur. Cela fonctionne aussi très bien.

Cependant, je pense qu'il serait plus logique si j'avais 2 tables: 1) Articles et 2) ArticleImages. J'utiliserais une clé étrangère pour associer les images à l'article. Ainsi, lors de la publication d'un article, il ajoute les données de l'article à la table 'Articles' et déplace chaque image vers une nouvelle ligne dans 'ArticleImages'.

Alors, finalement, ma table 'ArticleImages' pourrait être:

ID | ImageURL | ArticleID

portion de mon contrôleur 'articles.php':

<?php  

    public function action_add() 
    { 
    $val = Model_Article::validate('add_article'); //<-- maybe its just me but i never saw any similar to this in fuelphp sorry about this if im wrong 

    // if your form validation is okay than continue with everyhing else 
    if ($val->run()) 
    { 
     $article = Model_Article::forge(); 
     // Custom configuration for this upload 
     $config = array(
      'path' => DOCROOT.DS.'images', 
      'randomize' => true, 
      'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
     ); 

     Upload::process($config); 

     // if a valid file is passed than the function will save, or if its not empty 
     if (Upload::is_valid()) 
     { 
      // save them according to the config 
      Upload::save(); 

      //if you want to save to tha database lets grab the file name 
      $value = Upload::get_files(); 

      foreach($value as $files) { 
       print_r($files); 
      } 
      $article->filename = $value[0]['saved_as']; 
     } 

     $status = (Input::post('save_draft') ? 0 : 1); 

     if (! $val->input('category_id')) 
     { 
      $category_id = null; 
     } 
     else 
     { 
      $category_id = $val->validated('category_id'); 
     } 

      $article->user_id = $this->user_id; 
      $article->category_id = $category_id; 
      $article->title = $val->validated('title'); 
      $article->body = $val->validated('body'); 
      $article->published = $status; 


     if ($article->save()) 
     { 
      Session::set_flash('success', 'Article successfully added.'); 
     } 
     else 
     { 
      Session::set_flash('error', 'Something went wrong, '. 
       'please try again!'); 
     } 

     Response::redirect('articles/add'); 
    } 

    $this->template->title = 'Add Article'; 
    $this->template->content = View::forge('articles/add') 
     ->set('categories', Model_Category::find('all'), false) 
     ->set('val', Validation::instance('add_article'), false); 
    } 

/* End of file articles.php */ 

Répondre

1

Alors, quand j'ai fait le code pour vous de retour quelques jours après, vous avez seulement demandé, une entrée de fichier.

Et aucune offense, mais vous faites tout faux ...

foreach($value as $files) { 
     print_r($files); 
    } 
$article->filename = $value[0]['saved_as']; 

devrait être

foreach($value as $files) { 
      $articleimg = Model_Articleimages::forge(); 
      $articleimg->image_row_name = $files['saved_as'] 
     } 

Pour vous faire comprendre

ce que vous avez fait ici, oui $value = Upload::get_files(); ce obtient tous les éléments mais puisque vous avez besoin de boucle troubler les éléments dont vous n'avez pas besoin

Deuxième

ce $value[0]['saved_as'] saisit seulement le premier nom de l'image, tout le premier, et puisque vous êtes dans une boucle maintenant, vous devez vous référer à la variable $files comme je vous le montre l'exemple ci-dessus, juste un exemple

2

Vous essayez de faire un lien entre les articles et ArticleImages. Un articleImage appartient à un article, tandis qu'un article a plusieurs articlesImages. FuelPHP a une fonctionnalité intégrée pour ce que vous essayez d'accomplir. Jetez un oeil à la FuelPHP docs on its Object Relational Mapper, en particulier les relations Belongs To et Has Many.