Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Posted by débutantjelix on 05/18/2021 11:40

Bonjour,

Avec Symfony, l'utilisation des "fixtures" permet d'insérer des jeux de données dans une base de données de tests afin de pouvoir effectuer des tests proches d'une base de données réelle.

Existe-t-il un équivalent sur Jelix ?

Merci pour d'avance pour vos réponses

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Reply #1 Posted by laurentj on 05/19/2021 14:32

Bonjour,

Tu as la méthode jDaoDbMapper::insertDaoData() qui permet d'insérer facilement une liste de données dans une table, données que tu peux lire depuis un JSON par exemple.

test.json:

{
 "dao": "mymodule~mydao",
 "properties": ["id", "label"],
 "data": [
     [ 1 , "foo"],
     [ 2 , "bar"],
  ]
}

test.php

$dataToInsert = json_decode(file_get_contents('test.json'), true);
$daoMapper = new jDaoDbMapper('profilejdb');
$option = jDbTools::IBD_EMPTY_TABLE_BEFORE;
$daoMapper->insertDaoData($dataToInsert['dao'],
                $dataToInsert['properties'], $dataToInsert['data'], $option);

Tu peux aussi utiliser une méthode plus "bas niveau" (utilisée par jDaoDbMapper::insertDaoData()): jDbTools::insertBulkData().

test2.json:

{
 "table": "mytable",
 "columns": ["id", "label"],
 "primarykey":["id"],
 "data": [
     [ 1 , "foo"],
     [ 2 , "bar"],
  ]
}

test2.php

$dataToInsert = json_decode(file_get_contents('test2.json'), true);
$db = jDb::getConnection('profilejdb');

$option = jDbTools::IBD_EMPTY_TABLE_BEFORE;
$db->tools()->insertBulkData($dataToInsert['table'],
                $dataToInsert['columns'], $dataToInsert['data'], $dataToInsert['primarykey'], $option);

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Reply #2 Posted by débutantjelix on 05/20/2021 16:59

laurentj a dit :
Bonjour,

Tu as la méthode jDaoDbMapper::insertDaoData() qui permet d'insérer facilement une liste de données dans une table, données que tu peux lire depuis un JSON par exemple.

test.json:
<code>
{
"dao": "mymodule~mydao",
"properties": ["id", "label"],
"data": [
[ 1 , "foo"],
[ 2 , "bar"],
]
}
</code>

test.php
<code>
$dataToInsert = json_decode(file_get_contents('test.json'), true);
$daoMapper = new jDaoDbMapper('profilejdb');
$option = jDbTools::IBD_EMPTY_TABLE_BEFORE;
$daoMapper->insertDaoData($dataToInsert['dao'],
$dataToInsert['properties'], $dataToInsert['data'], $option);
</code>


Tu peux aussi utiliser une méthode plus "bas niveau" (utilisée par jDaoDbMapper::insertDaoData()): jDbTools::insertBulkData().

test2.json:
<code>
{
"table": "mytable",
"columns": ["id", "label"],
"primarykey":["id"],
"data": [
[ 1 , "foo"],
[ 2 , "bar"],
]
}
</code>

test2.php
<code>
$dataToInsert = json_decode(file_get_contents('test2.json'), true);
$db = jDb::getConnection('profilejdb');

$option = jDbTools::IBD_EMPTY_TABLE_BEFORE;
$db->tools()->insertBulkData($dataToInsert['table'],
$dataToInsert['columns'], $dataToInsert['data'], $dataToInsert['primarykey'], $option);
</code>

Bonjour jlaurent, merci d'avoir répondu,

y aurait-il un autre moyen sans passer par un fichier json mais plutôt en créant mes données via "faker" ?

Par exemple je voudrais avoir 20 bonhommes "fakés" dans ma table Bonhomme :

...
$faker = \Faker\Factory::create('fr_FR');
for($i = 1; $i <= 20; $i++){
  $bonhomme = new Bonhomme();
  $bonhomme->setName($faker->name())
           ->setEmail($faker->email());
  $manager->persist($bonhomme);
}
$manager->flush();
...

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Reply #3 Posted by laurentj on 05/22/2021 21:18

Dans ce cas, on peut utiliser un dao

$faker = \Faker\Factory::create('fr_FR');
for($i = 1; $i <= 20; $i++){
  $bonhomme = jDao::createRecord('mymodule~bonhomme');
  $bonhomme->name = $faker->name();
  $bonhomme->email = $faker->email();
  $bonhomme->save();
}

Voir la doc sur les DAO

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Reply #4 Posted by débutantjelix on 05/27/2021 11:26

laurentj a dit :
Dans ce cas, on peut utiliser un dao

<code>
$faker = \Faker\Factory::create('fr_FR');
for($i = 1; $i <= 20; $i++){
$bonhomme = jDao::createRecord('mymodule~bonhomme');
$bonhomme->name = $faker->name();
$bonhomme->email = $faker->email();
$bonhomme->save();
}
</code>

Voir la doc sur les DAO

En effet, merci laurentj.

Par contre où se trouve le bouton pour passer le sujet en "résolu" ?

  [Opened] Quel est l'équivalent des "fixtures" Symfony pour Jelix ?

Reply #5 Posted by laurentj on 05/28/2021 09:24

Il n'y a pas, mais c'est pas grave :-)

 
Page
  1. Quel est l'équivalent des "fixtures" Symfony pour Jelix ?