..:: MX Studio Fóruns ::..: Multi-inserção - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Multi-inserção Como utilizar.

#1 User is offline   ayslan 

  • Group: Membros
  • Posts: 13
  • Joined: 24-August 10

Posted 16 November 2010 - 07:02 PM

Boa noite a todos.

A minha dúvida está em como utilizar a multi-inserção com os métodos implementados na Lumine_Base.
Existe a propriedade array denominada _multiInsertList e os métodos: _getMultiInsertSQL($ignoreAutoIncrement = true), addMultiInsertItem(), multiInsert( $ignoreAutoIncrement = true ). Gostaria de saber como utilizá-los, pois tenho que limpar e inserir dados em uma table N-N.


Grato!


0

#2 User is offline   hufersil 

  • Group: Moderadores
  • Posts: 1265
  • Joined: 15-January 04

Posted 19 November 2010 - 05:45 PM

Para que este método funcione corretamente, você precisará especificar todos os campos da entidade.
Supondo que você tenha uma entidade chamada Usuario que tenha os campos

- idusuario (autoinc)
- nome
- email
- senha

E você tem uma lista com 1000 usuarios que veio de um txt, você pode fazer assim:

$user = new Usuario();

foreach( $lista as $linha ){
  // pegando os valores da linha (exemplo)
  list($nome,$email,$senha) = $linha;
  // atribuindo ao objeto
  $user->nome = $nome;
  $user->email = $email;
  $user->senha = $senha;
  // adicionando o item
  $user->addMultiInsertItem();
}

// agora que ja colocamos os 1000 registros, vamos mandar inserir tudo de uma vez
$user->multiInsert();


O padrão é ignorar os campos que forem auto-increment.
Para que funcione, o banco de dados deve suportar a sintaxe de multi-insert, exemplo: INSERT INTO tabela (campo1, campo2, campo3) VALUES (...,...,...), (...,...,...), (...,...,...)

@braços e fique com Deus!
0

#3 User is offline   ayslan 

  • Group: Membros
  • Posts: 13
  • Joined: 24-August 10

Posted 19 November 2010 - 11:41 PM

Funcionou perfeitamente. Muito obrigado, Hugo.

Porém ainda não consegui utilizar o begin(), rollback() e commit()... O questionamento está no último post que respondi. Eu crio a instância do objeto, faço a chamada ao begin() ($obj->begin()) conforme foi explicado no post do MaajDrall sobre controle de transações, mas não funciona.

Além disso tenho outra dúvida, porém em relação à procedures, ou quem sabe haja um método para o que eu preciso.

Criei uma estrutura de controle de acesso conforme segue:
Usuários pertencem à Grupos e cada grupo possui ações (permissões) que são definidas para ele. Porém, quando o usuário é uma pessoa tem permissão de acessar os grupos, criando, editando, etc, é necessário que ele veja, além do próprio, somente os grupos que fazem parte da árvore para baixo, ou seja, os filhos, os netos, etc... Para isso necessito utilizar recursividade, mas não vejo muitas vantagens em utilizar da maneira como fiz. Segue:

$groupList = NULL;
$totalRow = 0;

recursion($_POST['userGroupId'], $groupList, true, $totalRow);

function recursion($_groupId, &$result, $firstTime, &$totalRow)
{
	$query = $firstTime? 'groupId = ' . $_groupId : 'groupParentId = ' . $_groupId;

	$groupObj = new Group();
	$groupObj->where($query);
	$totalRow += $groupObj->find();
	$groupObj->find();
	
	$arrayGroup = $groupObj->allToArray();
		
	foreach($arrayGroup as $group)
	{
		$result[] = $group;
		recursion($group['groupId'], $result, false, $totalRow);
	}
}



TABLE:
tb_group
FIELDS: groupId, groupName, groupParentId


Mesmo sendo de uma maneira mais simples, eu criei a paginação, a ordenação de acordo com a coluna clicada, e etc nessa estrutura, porém para filtros eu vi que eu deveria varrer novamente o array e fazer o algoritmo de busca pela palavra pesquisada (ou parte dela), ou seja, não vale muito a pena fazer assim já que uma procedure faria esse trabalho de uma maneira mais rápida e com uma quantidade de acessos ao banco muito menor, ainda mais se eu quiser utilizar essa recursividade em tabelas com uma quantidade de registros consideravelmente maior, como um programa de afiliados, por exemplo, sei lá. Assim sendo pensei que possa haver ou uma maneira de acesso à procedures pelo Lumine, ou algum método do próprio Lumine que já faça o trabalho que eu preciso.
Eu tentei, sem sucesso, utilizar o Lumine_Dialect_MySQL($obj) para executar uma procedure. Segue como eu fiz:

$groupObject = new Group();

$teste = new Lumine_Dialect_MySQL($groupObject);
$conn = new Lumine_Connection_MySQL();
$conn->connect();
$teste->setConnection($conn);
$teste->execute('SELECT * FROM tb_group');



Seria utilizando o Lumine_Dialect_MySQL para fazer acesso à procedures mesmo? Ou existe alguma outra solução sem procedures para o problema que expus? Por favor, se souberem das duas soluções, compartilhem...


Valeu galera! Obrigado novamente Hugo.

Deus os abençoe!!!



View Posthufersil, on 19 November 2010 - 05:45 PM, said:

Para que este método funcione corretamente, você precisará especificar todos os campos da entidade.
Supondo que você tenha uma entidade chamada Usuario que tenha os campos

- idusuario (autoinc)
- nome
- email
- senha

E você tem uma lista com 1000 usuarios que veio de um txt, você pode fazer assim:

$user = new Usuario();

foreach( $lista as $linha ){
  // pegando os valores da linha (exemplo)
  list($nome,$email,$senha) = $linha;
  // atribuindo ao objeto
  $user->nome = $nome;
  $user->email = $email;
  $user->senha = $senha;
  // adicionando o item
  $user->addMultiInsertItem();
}

// agora que ja colocamos os 1000 registros, vamos mandar inserir tudo de uma vez
$user->multiInsert();


O padrão é ignorar os campos que forem auto-increment.
Para que funcione, o banco de dados deve suportar a sintaxe de multi-insert, exemplo: INSERT INTO tabela (campo1, campo2, campo3) VALUES (...,...,...), (...,...,...), (...,...,...)

@braços e fique com Deus!

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic


Similar Topics Collapse

  Topic Forum Started By Stats Last Post Info
New Replies string de conexão
o q tenho ta com referencia como faço p
ASP Rafael Gomes 
  • 0 Replies
  • 430 Views
New Replies Dreamweaver & MySQL, Como faço um campo comentario
Como Fazer 1 campo comentario, tipo blog
MySQL thiago_galvao 
  • 1 Reply
  • 1572 Views
New Replies interagir com arquivo flv em um player dinamico tem como?
preciso clicar em um input e ir para um trecho especifico do filme...
Flash & ActionScript rodrigomc2000 
  • 1 Reply
  • 750 Views
New Replies porcentagem com javascript
como redimensiono um arquivo swf
Dreamweaver ma2605 
  • 1 Reply
  • 1903 Views
New Replies Ladrão devolve celular após mensagens comoventes Notícias Notícias 
  • 0 Replies
  • 583 Views
New Replies Graficos no Flash ?
como customizar ( graficos) no Flash ?
Flash & ActionScript ::Ricardo:: 
  • 1 Reply
  • 837 Views
New Replies Attachments Como fazer o efeito "lupa"?
efeito lupa vi e gostaria de saber fazer
Fireworks yan0202 
  • 10 Replies
  • 1519 Views
New Replies COMO FAZER FONTES METÁLICAS EM RELEVO.
ME AJUDEM COMO FAZER NO COREL 11
Corel Draw RAIFF MATOS 
  • 3 Replies
  • 7642 Views

Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)