2012-07-23 6 views
1

Je voudrais insérer un tableau dans une base de données MYSQL, de préférence en utilisant l'enregistrement actif de Yii.Insertion d'un tableau dans la base de données Yii

Par exemple, j'ai un un tableau:

User = array(
    fname => "Joe" 
    lname => "Schmidt" 
) 

avec une table utilisateur dans ma base de données avec id colonnes, FNAME et lname. Une des options est de créer un objet et de le faire:

$user = new User; 
$user->fname = User['fname']; 
$user->lname = User['lname']; 
$user->save(); 

Cependant, cela semble être autant de code pour une telle fonctionnalité commune. Existe-t-il un moyen d'insérer un tableau dans la base de données où les clés de tableau correspondent aux colonnes correspondantes sans que j'écrive ma propre fonction ou que je fasse une requête SQL? Idéalement, il utilise l'enregistrement actif de Yii déjà présent.

+0

Vous pouvez utiliser l'affectation de masse pour cela: '$ user = nouvel utilisateur(); $ user-> attributes = $ data_array; if (! $ user-> save()) {print_r ($ user-> erreurs, true); } '.Assigner un tableau à la propriété 'attributes' fera ce que vous voulez, mais seulement pour les attributs qui ont une règle de validation définie pour le scénario courant. – DCoder

+0

@DCoder, c'est une solution géniale et succincte que je cherchais! Si vous le dites en réponse, je l'accepterai. – joeschmidt45

+1

Accepter [la réponse de Pentium10 ci-dessous] (http://stackoverflow.com/a/11607042/1233508) à la place :) – DCoder

Répondre

5

Ce que vous voulez faire est géré par le cadre lui-même.

Vous pouvez assigner comme masse:

$user->attributes=$_POST['User']; 

En savoir plus sur Mass Assignment

0

Je n'ai jamais travaillé avec Yû avant, donc je ne peux pas offrir une solution à l'aide, mais vous pouvez sérialiser le tableau et le stocker dans la cellule unique dans votre base de données, comme ceci:

$user = array("fname" => "Joe", "lname" => "Schmidt"); 
$serialized = serialize($user); 

//Store the $serialized variable in the database 

Lorsque vous êtes prêt à y accéder:

//Get your data from the database 

$unserialized = unserialize($usersFromDB); 
$fname = $unserialized['fname']; //Joe 

Hope that helps.

-1

la fonction est assez simple, essayez ceci:

function insert($table, $fields_values = array()) 
    { 
    $q1 = join(",", array_keys($fields_values)); 

    $q2 = "'".join("','", array_values($fields_values))."'"; 

    $query = "INSERT INTO $table($q1) VALUES($q2)"; 

    // do your DB insert here 
    } 

L'astuce principale est le tableau de conversion et interroger à l'aide rejoindre array_keys/array_values.

-1

Selon la quantité de données dans le tableau, vous pouvez vous écrire propre fonction, par exemple

a) vérifier cette backUpdate, modifiez-le pour insérer/retirer de rendre l'option de vue

b) Suivre ce thread

c) possible traps lors de l'insertion de multiples enregistrements

d) vérifier cette associée SOQ

Si vous savez ce que vous faites est facile à faire, il vous suffit de prendre soin de

  • validation
  • enregistrements existent dans les tableaux associés (le cas échéant FKey impliqué) Option
  • d). sera une réponse possible si vous avez des insertions simples (sans tables associées)
Questions connexes