Je souhaite importer des données Excel en tant que json dans Codeigniter avec un identifiant de génération.
mon modèle
{ "site_id":"AR001",
"site_name":"Site AR 001",
"id_site_doc":"5df1b4223269f818adab55af",
"id_project_doc":"5da43895e619143bcff53ab1",
"implementation_id":"IMPDEMO2003310001",
"status":"implementation_created",
"endstate":false,
"created_by":"sgph_pm@mittapp.com",
"counter_mr":"0",
"tech_boq_ids":[
],
...
{ "site_id":"AR002",
"site_name":"Site AR 002",
"id_site_doc":"5df1b4223269f818adab55af",
"id_project_doc":"5da43895e619143bcff53ab2",
"implementation_id":"IMPDEMO2003310001",
"status":"implementation_created",
"endstate":false,
"created_by":"sgph_pm@mittapp.com",
"counter_mr":"0",
"tech_boq_ids":[
],
mon contrôleur
//count row
$lastRow = $objPHPExcel->setActiveSheetIndex($sheetnumber)->getHighestRow();
$countrow = $lastRow - 1;
//start loop excel from 2nd row. Row 1 is title row
for ($j=2; $j < $lastRow; $j++ ){
$myArray[] = array(
'site_id' => $objWorksheet->getCell('C'.$j)->getValue(),
'site_name' => $objWorksheet->getCell('D'.$j)->getValue(),
'id_site_doc'=> $objWorksheet->getCell('J'.$j)->getValue(),
'id_project_doc' => $objWorksheet->getCell('K'.$j)->getValue(),
//generate ID from model
'implementation_id' => $this->M_MRCR_A->generateImpId(),
...
le résultat
public function generateImpId() {
$now = date('ymd');
$check = "SELECT COUNT(*) as count FROM OP_IMP_15 WHERE DATE(OP_IMP_15.created_at) = DATE(NOW())";
$querycheck = $this->db->query($check);
$id = $querycheck->row()->count;
return 'IMPDEMO'.$now.str_pad($id, 4, '0', STR_PAD_LEFT);
}
mes attentes strong >
pour incrémenter "implementation_id" en fonction du nombre de lignes que les données seront importées et du format basé sur l'ID personnalisé que j'ai créé (je ne peux pas utiliser uuid). ex: J'ai 3 lignes à importer, donc la valeur de $ implementation_id sera: IMPDEMO2003310001, IMPDEMO2003310002, IMPDEMO2003310003
3 Réponses :
Vous n'essayez pas de tout faire en une seule boucle. p>
Peut-être que vous devriez utiliser une première itération (pour boucle) pour créer la matrice, puis une deuxième itération pour remplir ce champ implémenté. P>
Vous pouvez le faire en obtenant l'ID d'implémentation de démarrage au début de la boucle et en l'incrémentant simplement à chaque fois (PHP peut faire face à l'incrémentation d'une chaîne comme celle-ci) ...
IMPDEMO2003310001 IMPDEMO2003310002 IMPDEMO2003310003
cela devrait vous donner des valeurs comme ...
$implementationID = $this->M_MRCR_A->generateImpId();
//start loop excel from 2nd row. Row 1 is title row
for ($j=2; $j < $lastRow; $j++ ){
$myArray[] = array(
// ...
//generate ID from model
'implementation_id' => $implementationID++,
Eh bien, puisque vous avez déjà la valeur implementation_id générée, et que je n'ai aucune idée de ce que fait la fonction generateImpId () , vous pouvez remplacer manuellement chaque implementation_id généré avec le $ j vous avez:
//count row
$lastRow = $objPHPExcel->setActiveSheetIndex($sheetnumber)->getHighestRow();
$countrow = $lastRow - 1;
//start loop excel from 2nd row. Row 1 is title row
for ($j=2; $j < $lastRow; $j++ ){
$implementation_id = $this->M_MRCR_A->generateImpId();
$implementation_id = substr($implementation_id, 0, -4) . str_pad($j-1, 4, '0', STR_PAD_LEFT); // since $j starts with 2
$myArray[] = array(
'site_id' => $objWorksheet->getCell('C'.$j)->getValue(),
'site_name' => $objWorksheet->getCell('D'.$j)->getValue(),
'id_site_doc'=> $objWorksheet->getCell('J'.$j)->getValue(),
'id_project_doc' => $objWorksheet->getCell('K'.$j)->getValue(),
//generate ID from model
'implementation_id' => $implementation_id,
...
N'est-ce pas un long chemin par rapport à l'utilisation de ++?
@NigelRen Je suppose que ++ ne fonctionnera pas car l'identifiant est un caractère personnalisé et non un entier
Avez-vous essayé - $ implementationID = "IMPDEMO2003310001"; echo $ ID d'implémentation ++. PHP_EOL; echo $ ID d'implémentation ++. PHP_EOL; echo $ ID d'implémentation ++. PHP_EOL; ?
voulez-vous conserver la valeur
implementation_idou voulez-vous la remplacer par$ countrow? Qu'attendez-vous de l 'implementation_id?Peut-être que générer un uuid convient mieux?
@Hastadhana j'ai édité la question, j'espère que c'est répondre à votre question
@CarlosGant je ne peux pas, je devrais utiliser un ID personnalisé car l'exigence est différente
Et quel est le problème exact avec tout ce code? Qu'avez-vous essayé pour que cela fonctionne?