Bonjour
Je rencontre un soucis, je ne trouve pas dans la doc toutes les commandes utilisable avec cake migrations qui est livré avec cakephp 3.

Je cherche entre autre la fonction qui permet de reinitisaliser la base de donnée avec toutes les modifications deja faites.
car je viens de supprimer physiquement les tables.

Auriez vous une idées ?

# bin/cake migrations status

Welcome to CakePHP v3.3.2 Console
---------------------------------------------------------------
App : src
Path: /var/www/htdocs/src/
PHP : 5.6.24-0+deb8u1
---------------------------------------------------------------
using migration path /var/www/htdocs/config/Migrations
using seed path /var/www/htdocs/config/Seeds
using environment default

 Status  Migration ID    Migration Name 
-----------------------------------------
     up  20160829153358  CreatePartners       
     up  20160829162631  CreateItems          
     up  20160829171648  CreateItemsPartners  
     up  20160829202912  CreateCountriesTable 
     up  20160829205354  Initial 

18 réponses


Lartak
Réponse acceptée

Faker n'est pas indispensable pour utiliser le Seed de Migrations, mais pour générer des données aléatoires.
Tu fais tout simplement la commande composer require fzaninotto/faker et ensuite pour l'utiliser il te suffira par exemple avant le nom de la classe d'ajouter : use Faker\Factory; puis $faker = Factory::create();.

est ce qu'il existe une sorte de composer search list ? comme pour apt-cache search sur Debian ?

Pour ce qui concerne les commandes disponibles avec Composer, il te suffit de regarder ici : Command-line interface / Commands - Composer et pour précisément ce que tu demandes : Command-line interface / Commands » search - Composer.

sylvain
Auteur

oui j'ai testé tout ce qui est indiqué ici.
http://book.cakephp.org/3.0/fr/migrations.html

J'aurais bien aimé avoir aussi la commande ALTER pour modifier les informations d'un champs

sylvain
Auteur

oui dire qu´un champs n´est plus de type int mais de type text

sylvain
Auteur

je vois pas le apport avec cake migrations, je pensais justement qu'on ai pas a devoir aller dans le code pour faire ses modifs.

Dans ma tete , Migration me permet de gerer en ligne de commande les changements .
Hors si maintenant je dois aller me taper des lignes a la main, je trouve du coup moins interessant.

sylvain
Auteur

mais c'est que j'ai dit, je ne veux pas ma palucher manuellement les change.

cette fonction, pour moi n'as aucun interet si je dois moi meme l'ecrire, autant que je me un script sql de mise a jour du champs.
c'est plus simple. que toutes les mic macs qui se sont crée avec Migration

Salut
Tu n'as p-e pas bien lu la doc car au début il te donne l'endroit ou tu doit chercher ta réponse :P
la doc
et
La réponse est ici :P

sylvain
Auteur

ca ne repond pas a la question. Les docs je vois pas comment appliquer en ligne de commande cake migration...

C'est ça que tu cherche ?

./bin/cake migrations migrate 

sinon c'est dans cette section la
ou tu trouve

./bin/cake bake migration CreateProducts name:string description:text created modified

les diférent type de migration

(/^(Create)(.)/) Crée la table spécifiée.
(/^(Drop)(.
)/) Supprime la table spécifiée. Ignore les arguments de champ spécifié.
(/^(Add).(?:To)(.)/) Ajoute les champs à la table spécifiée.
(/^(Remove).(?:From)(.)/) Supprime les champs de la table spécifiée.
(/^(Alter)(.*)/) Modifie la table spécifiée. Un alias pour CreateTable et AddField.

sylvain
Auteur

Oui merci. Mais j´ai a nouveau le probleme pour seeder . il semble etre inclus mais je ne trouve pas comment alimenter les tables avec des fausses donnees . J´ai vu dans phinx qu´il fallait faker.
Bref tout ne tombe pas cuit dans le bec ...

en fait la migration de cake ne permet pas de remplir avec des donnée elle créer uniquement la structure tu peux éditer le fichier de migration et rajouter une logique pour remplire la table mais je ne pense pas qu'il y ai une commande pour remplir automatique

A je vien de voir la fonctionnalité dont tu parle seed
il disent bine de suivre a la lettre la doc de phinx
en plus cake a une fonction pour les créer tes seed
Exemple créer un seed pour la table Articles

bin/cake bake seed Articles

et pour l'executé c'est

./bin/cake migrations seed

Pour tout les seed

./bin/cake migrations seed --seed ArticlesSeed

pour un seed en particulier.

Vraiment cool comme fonction je ne la connaissai pas

Merci :D

sylvain
Auteur

bonjour @makamo
c'est ce que j'ai fait mais j'ai une erreur.
J'ai pas trop compris pourquoi pas ne marche pas simplement pas défaut ?
en tout cas c'est un peu genant du coup

 == ItemsSeed: seeding

  [PDOException]                                                                 
  SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default valu  
  e                                                                              

seed [--seed SEED] [-p|--plugin PLUGIN] [-c|--connection CONNECTION] [-s|--source SOURCE]
sylvain
Auteur

en fait ca marche plus on moins, je viens juste de comprendre que cake migrations seed ne gere pas l'insertion de fausse données (fake)

si je regarde l'exemple de phinx ci dessous, je me demande comment verifier que Faker est installé dans cakephp ?
j'ai regardé dans Vendor, mais j'ai rien trouvé qui s'y rapporte, ni meme Migration.

Aussi peut etre dois je installer en plus faker ( https://github.com/gourmet/faker ) , mais lequel choisir , si on tape faker cakephp , il est difficile de savoir si c'est pour cakephp 2 ou 3.

use Phinx\Seed\AbstractSeed;

class UserSeeder extends AbstractSeed
{
    public function run()
    {
      $faker = Faker\Factory::create();
      $data = [];
      for ($i = 0; $i < 100; $i++) {
          $data[] = [
              'username'      => $faker->userName,
              'password'      => sha1($faker->password),
              'password_salt' => sha1('foo'),
              'email'         => $faker->email,
              'first_name'    => $faker->firstName,
              'last_name'     => $faker->lastName,
              'created'       => date('Y-m-d H:i:s'),
          ];
      }

      $this->insert('users', $data);
    }
}
sylvain
Auteur

Oui d´accord mais comment etre sur que c´est cette librairie qu´il faut parmis des dizaines qui existe ?

Bonjour.
Faker n'étant pas une librairie indispensable pour faire fonctionner le Framework, elle ne fait pas partie des dépendances importées automatiquement lors de son installation.
Pour l'utiliser, il te suffit de l'importer via composer : Faker is a PHP library that generates fake data for you. et suivre la documentation de la librairie pour son utilisation.

sylvain
Auteur

Merci, en fait j'avais pas compris le lien entre tous les "composants". Donc CakePHP install Migration, mais pour utiliser Seed , il faut que je fasse un composer install faker.

Mais la ou je suis encore perdu, c'est que je ne sais pas comment il fait pour l'autoload ?
Est ce que composer l'a mis en place directement ? Est ce que je dois ajouter quelques chose en plus par rapport a cakephp ?

J'aurais quand meme apprécier qu'en faisant la generation des fichiers via seed, ils puissent remplir avec des fausses data.

est ce qu'il existe une sorte de composer search list ? comme pour apt-cache search sur Debian ?

sylvain
Auteur

Un gros merci, j'arrive un peu mieux a me reperer dans tout ca.
Petite question, en faisant la recherche j'ai vu donc fzaninotto/faker et gourmeet/faker avec comme description, for cakephp3.

J'aurais eut l'idée de prendre plutot le gourmet, est ce que tous les packets disponibles vont fonctionner a partir du moment ou ont l'install ?