IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Creer un post et ajouter catégories


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 207
    Par défaut Creer un post et ajouter catégories
    Voici tout d'abord le schéma de ma BDD, mon schéma yml se trouve tout en bas au cas ou.



    Pour le besoin de faire des tests simples j'essaye de créer un post et de lui ajouter des catégories.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $post1 = new Post(); //création d'un post
    $post1->body = 'post avec deux catégories cat1 et cat2';
    //Jusque la tout va bien le post est bien créé avec le bon body.
    //ajouter des catégories à un post.
     
     
    $post1->save();
    J'ai essayé pleins de trucs pour ajouter des catégories mais je ne sais vraiment pas comment m'y prendre, il doit me manquer encore cette logique symfony.

    Merci pour votre éventuelle aide.

    Mon yml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Post:
      actAs:
        Sluggable:
          unique: true
          fields: [title]
          canUpdate: true
          notnull: true
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        author_user_id:
          type: integer(8)
          notnull: true
        title:
          type: string(256)
          notnull: true
        excerpt:
          type: clob
        body:
          type: clob
          notnull: true
        #publish, pending, future, trash, ne pas pouvoir effacer un post tant qu'il n'est pas en mode trash
        post_status:
          type: string(16)
          notnull: true
        comment_status:
          type: boolean
          notnull: true
          default: 1
        ActAsnb_comment:
          type: integer(8)
          notnull: true
          default: 0
      relations:
        postAuthor:
          class: sfGuardUser
          local: author_user_id
          foreign: id
          type: one
          foreignType: many
          foreignAlias: Posts
      options:
        charset: armscii8
        collate: armscii8_bin
     
     
    Category:
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(32)
          notnull: true
        ActasSlug:
          type: string(45)
          notnull: true
        description:
          type: clob
        parent:
          type: integer(8)
          notnull: true
          default: 0
        count:
          type: integer(4)
          notnull: true
          default: 0
      options:
        charset: utf8
        collate: utf8_unicode_ci
     
    PostCategory:
      columns:
        post_id:
          type: integer(8)
          primary: true
          notnull: true
        cat_id:
          type: integer(8)
          primary: true
          notnull: true
      relations:
        post:
          class: Post
          local: post_id
          foreign: id
          foreignAlias: PostCategories
        cat:
          class: Category
          local: cat_id
          foreign: id
          foreignAlias: PostCategories
      options:
        charset: utf8
        collate: utf8_unicode_ci

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il manque des relations dans ton schéma YAML. Dans les tables Post et Category.

    Si dessous le shema.yml tel que je l'aurais écris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    Post:
      actAs:
        Sluggable:
          unique: true
          fields: [title]
          canUpdate: true
          notnull: true
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        author_user_id:
          type: integer(8)
          notnull: true
        title:
          type: string(256)
          notnull: true
        excerpt:
          type: clob
        body:
          type: clob
          notnull: true
        post_status:
          type: string(16)
          notnull: true
        comment_status:
          type: boolean
          notnull: true
          default: 1
        ActAsnb_comment:
          type: integer(8)
          notnull: true
          default: 0
      relations:
        postAuthor:
          class: sfGuardUser
          local: author_user_id
          foreign: id
          type: one
          foreignType: many
          foreignAlias: Posts
      options:
        charset: armscii8
        collate: armscii8_bin
     
     
    Category:
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(32)
          notnull: true
        ActasSlug:
          type: string(45)
          notnull: true
        description:
          type: clob
        parent:
          type: integer(8)
          notnull: true
          default: 0
        count:
          type: integer(4)
          notnull: true
          default: 0
      relations:
        Posts:
          foreignAlias: Categorys
          class: Post
          refClass: PostCategory
      options:
        charset: utf8
        collate: utf8_unicode_ci
     
    PostCategory:
      columns:
        post_id:
          type: integer(8)
          primary: true
          notnull: true
        cat_id:
          type: integer(8)
          primary: true
          notnull: true
      relations:
        post:
          class: Post
          local: post_id
          foreign: id
          foreignAlias: PostCategories
        cat:
          class: Category
          local: cat_id
          foreign: id
          foreignAlias: PostCategories
      options:
        charset: utf8
        collate: utf8_unicode_ci
    Il semble y manquer un lien dans la table category ou dans la table post pour définir qu'elles ont, entre elles, une relation n-n (le lien entre deux tables ne doit être défini que sur une seul des deux tables). Il est évident qu'entre les tables Tag et Post, il faudra aussi définir ce lien.

    On pourra alors utiliser :
    $newpost = new Post
    ... Initialiser les données du post
    $newcat = new Category
    ... Initialiser les données de la catégorie
    $newpost->setCategorys($new1cat)

    $newcat pourrait être un array d'objet catégories.

    Pour récupérer les données, on va récupérer un post dans un objet $actuPost puis pour les catégories :
    $actuCategories = $actuPost->getCategorys
    foreach $actuCategorys as $actuCatego { ... }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 207
    Par défaut
    En effet merci, parfait

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 207
    Par défaut
    JE me permet de rebondir sur mon Post.

    Je galarais comme un ane pour ajouter des catégories à un post car à mon avis mon schéma était faux non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Post:
      actAs:
        Sluggable:
          unique: true
          fields: [title]
          canUpdate: true
          notnull: true
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        author_user_id:
          type: integer(8)
          notnull: true
        title:
          type: string(256)
          notnull: true
        excerpt:
          type: clob
    .........
      relations:
        PostAuthor:
          class: sfGuardUser
          local: author_user_id
          foreign: id
          type: one
          foreignType: many
          foreignAlias: Posts
        #dans une relation many-many le local est le local de la refClass
        PostCategories:
          class: Category
          refClass: PostCategory
          local: post_id
          foreign: cat_id
          foreignAlias: Posts
        PostTags:
          class: Tag
          foreignAlias: Posts
          refClass: PostTag
          local: post_id
          foreign: tag_id
     
    Category:
      actAs:
        Sluggable:
          unique: true
          fields: [name]
          canUpdate: true
          notnull: true
      columns:
        id:
          type: integer(8)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(32)
          notnull: true
        description:
          type: clob
        parent:
          type: integer(8)
          notnull: true
          default: 0
        count:
          type: integer(4)
          notnull: true
          default: 0
     
    PostCategory:
      columns:
        post_id:
          type: integer(8)
          primary: true
          notnull: true
        cat_id:
          type: integer(8)
          primary: true
          notnull: true
      relations:
        Post:
          class: Post
          local: post_id
          foreign: id
          foreignAlias: PostCategories
          onDelete: CASCADE
        Category:
          class: Category
          local: cat_id
          foreign: id
          foreignAlias: PostCategories
          onDelete: CASCADE
    Mimi ou quelqu'un d'autre vous confirmez que mon yml est pas bon du tout?

    Sinon pour le besoin des test, j'ai refait mon yml comme tu me l'avait conseillé.

    Voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $newpost = new Post();
    $newpost->setTitle('DSDSQDQDQSDQDQDSQSDQS');
    //Initialiser les données du post
    $newcat = new Category();
    $newcat->setName('KOKOKOKOKOOKKO');
    //Initialiser les données de la catégorie
    $newpost->setCategories($newcat);
    $newpost->save();
    J'obtiens ceci.

    00 | Internal Server Error | Doctrine_Record_Exception
    Couldn't call Doctrine_Core::set(), second argument should be an instance of Doctrine_Collection when setting many-to-many references.
    Merci

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    En effet, tu as une relation de type 1-n, tu peux donc ajouter plusieurs criterias.

    Il faut lui fournir une collection pour le setCriterias, même si l'élément de la collection est unique.

    Dans mes souvenir, si tu lui donnes :
    $newpost->setCategories(array($newcat));

    cela devrait passer.

    Mais non testé.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 207
    Par défaut
    Citation Envoyé par mimi68 Voir le message
    En effet, tu as une relation de type 1-n, tu peux donc ajouter plusieurs criterias.

    Il faut lui fournir une collection pour le setCriterias, même si l'élément de la collection est unique.

    Dans mes souvenir, si tu lui donnes :
    $newpost->setCategories(array($newcat));

    cela devrait passer.

    Mais non testé.
    Malheureusement non j'ai déjà testé.
    Je suis désespéré!!!

Discussions similaires

  1. [wordpress] Creer un post avec champs ACF en front end
    Par inoxis91 dans le forum WordPress
    Réponses: 4
    Dernier message: 08/02/2015, 17h40
  2. Ajout catégories Sources : COBOL & JCL (voire REXX ?)
    Par Metalman dans le forum Evolutions du club
    Réponses: 0
    Dernier message: 05/02/2014, 10h50
  3. creer un post it sur le bureau
    Par albedo dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/05/2006, 16h38
  4. [Shell] Ajouter des éléments au poste de travail
    Par Feeder_Fan dans le forum Framework .NET
    Réponses: 2
    Dernier message: 04/12/2005, 04h07
  5. Réponses: 3
    Dernier message: 07/10/2005, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo