Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Salvando dados do Formulário em Base de Dados #6

Open
bitts opened this issue Mar 29, 2021 · 3 comments
Open

Salvando dados do Formulário em Base de Dados #6

bitts opened this issue Mar 29, 2021 · 3 comments
Assignees

Comments

@bitts
Copy link
Owner

bitts commented Mar 29, 2021

Salvar os dados do formulário de geração do PagTesouro para tabela da base de dados Joomla.

Anexar a issue documentação referente a criação de tabelas na instalação do componente.

@bitts bitts self-assigned this Mar 29, 2021
@bitts
Copy link
Owner Author

bitts commented Mar 29, 2021

https://docs.joomla.org/J3.x:Creating_a_simple_module/Using_the_Database/pt-br

Criando uma tabela ao Instalar

Para criar uma tabela no banco de dados durante a instalação do módulo precisaremos adicionar as seguintes linhas em mod_helloworld.xml:

<install>
     <sql>
         <file driver="mysql" charset="utf8">sql/mysql/install.mysql.utf8.sql</file>
         <file driver="sqlazure" charset="utf8">sql/sqlazure/install.sqlazure.utf8.sql</file>
     </sql>
</install>

<uninstall>
     <sql>
         <file driver="mysql" charset="utf8">sql/mysql/uninstall.mysql.utf8.sql</file>
         <file driver="sqlazure" charset="utf8">sql/sqlazure/uninstall.sqlazure.utf8.sql</file>
     </sql>
</uninstall>

<update> 
    <schemas>
        <schemapath type="mysql">sql/mysql/updates</schemapath> 
	<schemapath type="sqlazure">sql/sqlazure/updates</schemapath> 
    </schemas> 
</update>

Temos 3 seções no arquivo:

  • A tag install adiciona uma tabela ao banco de dados.
  • A tag uninstall remove a tabela do banco de dados se o módulo for desinstalado. Note que nem todos os módulos precisam dessa função (e ela não é obrigatória).
  • A tag update irá atualizar o banco de dados se uma atualização for necessária ao atualizar o módulo.

Em seguida você pode especificar a tag folder na seção files do arquivo helloworld.xml para garantir que os arquivos sql serão copiados do seu pacote zip para essas pastas:

<folder>sql</folder>

Note que nos temos esquemas para MySQL e Microsoft SQL - novamente você pode adaptar seu módulo para um ou ambos os sistemas.

Nesse exemplo nos iremos apenas mostrar um arquivo de exemplo para o banco de dados MySQL. Criar um servidor Microsoft SQL Server será um exercício para o leitor.

Em nosso arquivo install.mysql.utf8.sql nos iremos criar a tabela e inserir algumas saudações em línguas diferentes.

CREATE TABLE IF NOT EXISTS `#__helloworld` (
	`id` int(10) NOT NULL AUTO_INCREMENT,
	`hello` text NOT NULL,
	`lang` varchar(25) NOT NULL,

  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hello World', 'en-GB');
INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hola Mundo', 'es-ES');
INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Bonjour tout le monde', 'fr-FR');

No arquivo de desinstalação, nos iremos simplesmente remover a tabela.

DROP TABLE IF EXISTS `#__helloworld`

Finalmente vamos deixar um local reservado para os arquivos de atualização. Lá será preciso colocar um arquivo SQL para cada versão de componente. Cada nome de arquivo deve corresponder a seqüência de versão no arquivo de manifesto para essa versão. O Joomla usa essa string para determinar quais arquivos SQL devem ser executados e em que ordem eles serão executados.

Nota importante: Esses arquivos também serão usados para definir o número da versão na tabela #__schemas. Esse número de versão deve estar presente na versão atual do componente para que os novos arquivos SQL sejam executados durante a atualização. Por exemplo, se você tiver a versão 1.0 e estiver atualizando para a versão 1.1, o arquivo 1.1.sql não será executado se não houver nenhum arquivo 1.0.sql na versão 1.0. Por esse motivo, é uma boa prática ter um arquivo de atualização SQL para cada versão, mesmo se não houver nenhuma alteração SQL nessa versão.

# Placeholder file for database changes for version 1.0.0

Fazendo a requisição no arquivo helper

Ao instalar o nosso módulo nos podemos encontrar no banco de dados uma tabela chamada helloworld com os registros de saudações inseridas. Nos podemos agora recuperar esses registros do banco de dados para exibi-los aos usuários. Nos iremos alterar a função getHello presente o arquivo helper.php.

Por agora nos iremos ignorar campos de formulário para escolher um dos hello´s e vamos apenas retornar as saudações em inglês.

// Obtain a database connection
$db = JFactory::getDbo();
// Retrieve the shout
$query = $db->getQuery(true)
            ->select($db->quoteName('hello'))
            ->from($db->quoteName('#__helloworld'))
            ->where('lang = ' . $db->Quote('en-GB'));
// Prepare the query
$db->setQuery($query);
// Load the row.
$result = $db->loadResult();
// Return the Hello
return $result;

@bitts
Copy link
Owner Author

bitts commented Apr 5, 2021

insert values using Object

// Create and populate an object.
$profile = new stdClass();
$profile->user_id = 1001;
$profile->profile_key='custom.message';
$profile->profile_value='Inserting a record using insertObject()';
$profile->ordering=1;
$profile->profile_value = $db->quote('NULL');

// Insert the object into the user profile table.
$result = JFactory::getDbo()->insertObject('#__user_profiles', $profile);

@bitts
Copy link
Owner Author

bitts commented Apr 5, 2021

delete value

$db = JFactory::getDbo();

$query = $db->getQuery(true);

// delete all custom keys for user 1001.
$conditions = array(
    $db->quoteName('user_id') . ' = 1001', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);

$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);

$db->setQuery($query);

$result = $db->execute();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant