2017-02-11 4 views
-1

Привет У меня есть эти таблицы:Какой лучший способ вставить пост, тег, категорию в mysql?

Table Name | column 1 | column 2 | ... 
Posts  | ID  | Title | description 
Tags  | ID  | Name 
Categories | ID  | Title | Parent-ID 
Post-Tag | ID  | post-id | tag-id 
Post-Cat | ID  | post-id | cat-id 

как я могу вставить 1 пост с тегами & категории? я могу вставить новый пост, как это:

$stmt = $conn->prepare("INSERT INTO Posts (title, description) VALUES (:title, :desc)"); 

$stmt->bindParam(':title', $title); 
$stmt->bindParam(':desc', $description); 

$post_id = $conn->lastInsertId(); 

У меня есть только один пост за время, но, возможно, есть пять теги & 2 категории так как проверить тег/категория существует &, если существует получить его ID & если не вставьте его, а затем введите id & вставьте его в стол Post-tag/Post-cat ?!

+0

вы помечены как п.д.о. еще вы используете 'bind_param()', который mysqli_, и затем 'lastInsertId()', который является PDO. Вопрос неясно, с чем api действительно используется для связи. Эти разные apis не смешиваются. –

+0

Исправлено. Возникла проблема с копированием кода из моей системы –

+0

, чтобы немного ответить на это, вам нужно проверить, существует ли что-то, использующее 'SELECT' и' rowCount() '. –

ответ

0

Вот немного образца кода, чтобы дать вам представление о том, как он может работать ...

<?php 
class PostRepository { 

    public static function tagExists($tag) { 
     // do your query here and return tag-id if it exists and false if it doesnt exist 
    } 

    public static function insertTag($tag) { 
     // do your insert query here and return the inserted id and false on failure 
    } 

    public static function insertPostTag($id_post, $id_tag) { 
     // do your insert query here and return the inserted id 
    } 

    public static function insertPost($title, $description, $arr_tags) { 

     $conn = PdoHelper::getPdoInstance(); // get your conn-obj however... 

     $sql = "INSERT INTO `Posts` (title, description) VALUES (:title, :desc)"; 
     $stmt = $conn->prepare($sql); 
     $stmt->bindParam(':title', $title); 
     $stmt->bindParam(':desc', $description); 

     $post_id = $conn->lastInsertId(); 

     foreach($arr_tags as $tag) { 
      $existing_tag = self::tagExists($tag); 
      if(!$existing_tag) { 
       $existing_tag = self::insertTag($tag); 
      } 
      self::insertPostTag($post_id, $existing_tag); 
     } 

    } 
}