mysql – Laravel 8 Salvar Formulário dados de 2 tabelas num único form

Seguinte possuo uma Tabela chamada “Chamado” e uma tabela chamada “chamado_itens”.

Na Tabela Chamado seria meu CABEÇALHO (cliente, técnico, data, obs, etc) e na Tabela Chamado_itens teria os itens da tabela (serviço, atividade, peças)

Para inserir os dados na tabela chamado_itens preciso inserir o ID da tabela chamados, isso eu já consegui resolver, meu problema é como q no FORMULÁRIO o Laravel vai saber qual coluna é de qual tabela?

Resumindo 1 formulário inserindo dados em 2 tabelas.

OBS: meus relacionamentos já estão certinhos.

python 3.x – Erro ao linkar duas tabelas no SQLAlchemy (sqlalchemy.exc.InvalidRequestError: Object ‘is already attached to session ‘5’ (this is ‘6’)

Para entender como uma aplicação web é feita em python estou tentando criar uma pagina em que o usuário possa se cadastrar, logar, adicionar comentários sobre suas nebulosas preferidas e então salva-las em seu perfil.
Entretanto na tentativa de adicionar informações em uma tabela (nome da tabela: ‘Nebula_docs’) no SQLAlchemy, parecer haver um conflito com uma outra tabela já criada (nome da tabela: ‘User’)

Obs: por dificuldades no processo minhas tabelas estão no mesmo arquivo .py que a função de run da app. O que definitivamente não é ideal.

Ao rodar o app recebo a seguinte mensagem:

sqlalchemy.exc.InvalidRequestError: Object ‘<Nebula_docs at 0x1a198d84fd0>’ is already attached to session ‘5’ (this is ‘6’)

Aqui esta meu arquivo init.py

import os                                             
from flask import Flask                               
from sqlalchemy import Column, String, Integer        
from sqlalchemy import Float, DateTime, Text, ForeignKey          
from sqlalchemy.orm import relationship              
from flask_sqlalchemy import SQLAlchemy                                  
from flask_login import LoginManager                 
from datetime import datetime


db = SQLAlchemy()                                     

# primeira tabela com os dados do usuário
class User(db.Model):                     
    __tablename__='User'

    id = Column(Integer, primary_key=True)            
    email = Column(String(100), unique=True)          
    password = Column(String(100))                    
    name = Column(String(100))                        
    catalog = relationship('Nebula_docs', backref='author', lazy=True) 
    
    #funçãos que geralmente compõe o UserMixin

    @property                            
    def is_active(self):                  

    def get_id(self):                    
        return True

    def is_authenticated(self):          
        return True

    def is_anonymous(self):              
        return False

#segunda tabela em que os dados da Nebulosa que o usuário completar
class Nebula_docs(db.Model):
    __tablename__='Nebula_docs'

    id = Column(Integer, primary_key=True)
    day_register = Column(DateTime,nullable=False, default=datetime.utcnow)
    nebula_name = Column(String(50), nullable=False)
    ngc_code = Column(String(6))
    comment = Column(Text)
    user_id = Column(Integer, ForeignKey('User.id'), nullable=False)

#função de inicialização da app
def create_app():                                                   
    app = Flask(__name__)                                            
    
    #configurando a pp
    app.config.update(SECRET_KEY=os.urandom(24))                     
    app.config('SQLALQUEMY_DATABASE_URI') = 'sqlite:///db.sqlite3'   
    
    #iniciando o banco de dados
    db.init_app(app)                                                 
    with app.app_context():                                          
        db.create_all()                                              
    
    #iniciando o login do usuario
    login_manager = LoginManager()                                   
    login_manager.login_view= 'auth.login'                           
    login_manager.init_app(app)                                     

    @login_manager.user_loader                                       
    def load_user(user_id):                                          
        return User.query.get(int(user_id))                         


    from .main import main as main_blueprint                         
    app.register_blueprint(main_blueprint)                           
    from .auth import auth as auth_blueprint                         
    app.register_blueprint(auth_blueprint)                           

    return app      

O arquivo que contém o registro dos dados na tabela ‘Nebulas_docs’ é o seguinte:
main.py

from flask import Blueprint, render_template, url_for, request, redirect, flash
from flask_login import login_required, current_user
from .__init__ import User
from .__init__ import Nebula_docs
from .__init__ import db

main = Blueprint('main', __name__)     __name__ is the name o the project

@main.route('/')
def index():                           
    return render_template('index.html')

@main.route('/profile')                 
@login_required
def profile():
    return render_template('profile.html', name= current_user.name)

@main.route('/new')
@login_required
def new_nebula():
    return render_template('add_nebula.html')

#aqui se adiciona os dados da nebulosa

@main.route('/new', methods= ('POST'))
@login_required
def new_nebula_post():
    nebula_name = request.form.get('nebula_name')
    ngc_code = request.form.get('ngc_code')
    comment = request.form.get('comment')

    nebula = Nebula_docs(nebula_name=nebula_name, ngc_code=ngc_code, comment=comment, author=current_user)
    db.session.add(nebula)     #creio que aquie steja o erro
    db.session.commit()

    flash('Your nebula has been added')

    return redirect(url_for('main.index'))

#aqui se guardaria as informações definidas na função anterior

@main.route('/user_nebulas')
@login_required
def all_user_nebulas():
    user = User.query.filter_by(email=current_user.email).first_or_404()
    catalog = user.catalog
    return render_template(url_for('all_nebulas.html'), catalog=catalog, user=user)

creio que esteja havendo uma sobreposição das tabelas User e Nebula_docs, que estão compartilhando o mesmo db, mas não sei como resolver isso de maneira alguma.

Se alguem puder me ajudar ficaria imensamente grato.

php – O inner join esta retornando todos os valores das tabelas em um mesmo lugar, como resolvo?

Tem alguma coisa errada com essa consulta?

 <?php    
    
require_once "../system.php";
    $consulta = $mysqli->query("SELECT *,
                        season.serie_id
     FROM series inner JOIN season ON series.serie_id = season.serie_id");
    
    $series = $consulta->fetch_all(MYSQLI_ASSOC);
    ?>
   <div id="app">
    <div class="app_info">
      <div class="appSeasons">
        <table>
          <thead>
            <!-- SEASONS LIST -->
            <tr>
              <th>Temporadas</th>
            </tr>
          </thead>
          <tbody>
            <?php foreach($series as $dado): ?>
            <tr>
              <td><a href=""><h5 style="color: "><?php echo $dado("name"); ?></h5></a></td>
            </tr>
            <?php endforeach; ?>
          </tbody>
        </table>
      </div>

Porque esse código esta exibindo isso:

inserir a descrição da imagem aqui

Eu criei duas séries, e as temporadas ficam em uma tabela diferente, eu tentei usar o INNER JOIN porem ficou desse jeito, ele ta exibindo a 1° Temporada da série 1 e a 1°Temporada da série 2 nas páginas de cada um, mesmo estando sepradas.

O que esta errado?

mysqli stmt – Criar tabelas Mysql diretamente pelo PHP

Estou desenvolvendo um sistema, onde o usuário antes de usá-lo, terá que fazer a instalação. Na primeira tela conterá os seguintes dados:

inserir a descrição da imagem aqui

Usarei o mysqli_stmt no modo procedural. Inicialmente meu código está dessa forma:

if($_POST)
{
    $host = $_POST("Host");
    $bd = $_POST("BancoDados");
    $usuario = $_POST("Usuario");
    $senha = $_POST("Senha");  
    $conexao = mysqli_connect($host,$usuario,$senha,$bd);
    $stmt = mysqli_stmt_init($conexao);
    $criarTabelaNome = 'CREATE TABLE `sys_nome` ( `IdNome` INT NOT NULL AUTO_INCREMENT , `IdCodNome` VARCHAR(255) NOT NULL , `Nome` VARCHAR(255) NOT NULL , PRIMARY KEY (`IdNome`)) ENGINE = InnoDB;';
    $criarTabelaEnd = 'CREATE TABLE `sys_endereco` ( `IdEndereco` INT NOT NULL AUTO_INCREMENT , `IdCodEndereco` VARCHAR(255) NOT NULL , `Endereco` VARCHAR(255) NOT NULL , PRIMARY KEY (`IdEndereco`)) ENGINE = InnoDB;';  
}

Entendo que em um cadastro normal, eu usaria conforme o exemplo abaixo:

$nome = mysqli_real_escape_string($conexao,$_POST("Nome"));
$idade = mysqli_real_escape_string($conexao,$_POST("Idade"));
$sql = "INSERT INTO stmt_dados(Nome) VALUES(?,?);";
if(!mysqli_stmt_prepare($stmt,$sql))
{
  $erro = 'Erro ao cadastrar';
}
  else
{
    mysqli_stmt_bind_param($stmt,"ss",$nome,$idade);  
    mysqli_stmt_execute($stmt); 
}

Mas no caso da criação das tabelas, como eu poderia aplicar o mysqli_stmt procedural?

sql – Como fazer drop a todas as tabelas criadas hoje?

Obrigado por contribuir com o Stack Overflow em Português!

  • Certifique-se de responder à pergunta. Entre em detalhes sobre a sua solução e compartilhe o que você descobriu.

Mas evite

  • Pedir esclarecimentos ou detalhes sobre outras respostas.
  • Fazer afirmações baseadas apenas na sua opinião; aponte referências ou experiências anteriores.

Para aprender mais, veja nossas dicas sobre como escrever boas respostas.

Tabelas de MYSQL

inserir a descrição da imagem aqui

Como mostra a imagem, tenho a tabela adms_unidade onde já consigo mostrar as unidades listadas, e tenho a tabela adms_equipamentos com vários equipamentos cadastrados, quero mostrar quantos equipamentos cadastrados possuo em cada unidade usando o adms_unidade_id que é a chave estrangeira da tablea adms_equipamentos referente a chave primary da tabela adms_unidades .

já vi alguns exemplos e maneiras mas não sei se é erro de digitação ou não, obrigado !!!

Comparar a informação de dois data.frames (tabelas) para criar grupos e uma terceira coluna. em R

Eu estou tentando criar grupos diferenciados de empregos do banco de dados do CBO (CLASSIFICAÇÃO BRASILEIRA DE OCUPAÇÃO)
Eles fornecem um CBO2002.csv com duas colunas a coluna “CODIGO” (com o código de cada profissão) e a coluna “PROFISSAO” (com o nome da cada ocupação) em ordem.

ex:
da linha 1 a 28 são os profissionais militares.
da linha 29 a 44 são os políticos
e assim por diante

Eu tenho uma tabela (PROF) só com nome das profissões dos clientes, e gostaria de criar grupos de profissões e agrupar identificar esses clientes nesses grupos.

por exemplo: profissionais da tabela (PROF) que se encaixam nas ocupações das linhas 1 a 28 da tabela (CBO2002) entram no grupo MILITARES criando uma terceira coluna na tabela (PROF) com o nome de “GRUPOS” com essas profissões identificadas como “MILITAR”

    PRO2F <- PROF %>% 
dplyr::mutate(GRUPOS = dplyr::case_when 

( PROFISSAO == "OFICIAL GENERAL DA AERONAUTICA" ~ "MILITAR",
  PROFISSAO == "OFICIAL GENERAL DO EXERCITO" ~ "MILITAR",
))

Eu consegui dessa forma sem usar a tabela (CBO2002) de filtro, mas tive de escrever cada profissão e são mais de 3000.

A minha duvida é como posso usar os intervalos da tabela (CBO2002) como filtro para identificar e agrupar as profissões da minha tabela (PROF) entre a linha. Pra não ter de escrever 3000 profissões.

O que eu tentei e não funcionou até agora:

PROF2 <- PROF %>% 
    dplyr::mutate(GRUPOS = dplyr::case_when 
    
    ( PROFISSAO == CBO2002(c(1:28),"PROFISSAO") ~ "MILITAR" ))  

ou

militar<-as.vector(CBO2002(c(1:28),"PROFISSAO"))

PROF2 <- PROF %>% 
    dplyr::mutate(GRUPOS = dplyr::case_when 
    
    ( PROFISSAO == militar ~ "MILITAR" ))  

Eu sou novato e já agradeço pela atenção.

javascript – Erro de relacionamento entre tabelas no nodejs

Estou criando um sistema de gerenciamento de estoque onde um model tem categoria de um para muitos, esta fazendo a inserção corretamente, porem na hora de listar ele me retorna o erro:

SELECT `luminarias`.`id`, `luminarias`.`estado`, `luminarias`.`modeloL`, 
       `luminarias`.`qntd`, `luminarias`.`date`, `luminarias`.`createdAt`, 
       `luminarias`.`updatedAt`, `luminarias`.`modeloId`, 
       `modelo`.`id` AS `modelo.id`, 
       `modelo`.`modelo` AS `modelo.modelo`, 
       `modelo`.`createdAt` AS `modelo.createdAt`, 
       `modelo`.`updatedAt` AS `modelo.updatedAt` 
FROM `luminarias` AS `luminarias` 
LEFT OUTER JOIN `modelos` AS `modelo` 
ON `luminarias`.`modeloId` = `modelo`.`id` 
ORDER BY `luminarias`.`id` DESC;

Conexao estabelecida com sucesso!  
(node:20024) UnhandledPromiseRejectionWarning: SequelizeDatabaseError:  
Unknown column 'luminarias.modeloId' in 'field list'  
    at Query.formatError (C:UserspedroDesktopTanto FazGerenciamento de 
Estoquenode_modulessequelizelibdialectsmysqlquery.js:239:16)  
    at Query.run (C:UserspedroDesktopTanto FazGerenciamento de  
Estoquenode_modulessequelizelibdialectsmysqlquery.js:54:18)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:20024) UnhandledPromiseRejectionWarning: Unhandled promise rejection.   
This error originated either by throwing inside of an async function without 
a catch block, or by rejecting a promise which was not handled with .catch(). 
To terminate the node process on unhandled promise rejection, use the CLI 
flag `--unhandled-rejections=strict` (see 
https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:20024) (DEP0018) DeprecationWarning: Unhandled promise rejections are 
deprecated. In the future, promise rejections that are not handled will terminate 
the Node.js process with a non-zero exit code. 

Meu controller:

router.get("/luminaria", (req, res) => {
  Luminaria.findAll({
    include: ({ model: Modelo }),
    order: (
        ('id', 'DESC')
    ),
  }).then(luminarias => {
    res.render("luminaria/index", { luminarias: luminarias });
  });
});

Ja tentei mudar o tipo de relacionamento, mas não deu certo. Eu acredito que esteja certo, pq no insert funcionou bem.

banco de dados – Como ter duas ou mais tabelas num php

Boa noite, estou com um problema com a questão de banco de dados e php pois sou iniciante.
O problema que estou tendo é que eu preciso que exiba na tela mais de uma tabela, e até o momento está aparecendo somente uma.


$conexao = mysqli_connect($sql("host"),$sql("user"),$sql("pass"));
$select_database = mysqli_select_db($conexao, $sql("db"));
mysqli_query($conexao, "SET NAMES utf8");
$con = mysqli_connect($sql("host"),$sql("user"),$sql("pass"), $sql("db")); 
if (mysqli_connect_errno()) {
  echo "Não foi possível a conexão com o BD MySQL: " . mysqli_connect_error();
}
mysqli_select_db($con, $sql("db"));
    $dados = mysqli_query($con,"SELECT DISTINCT tblquestoes.textoQuestao as quest, qt1+qt2+qt3+qt4+qt5 as teste,tblquestoes.textoAlternativa1 as txt1, tblquestoes.textoAlternativa2 as txt2,tblquestoes.textoAlternativa3 as txt3,tblquestoes.textoAlternativa4 as txt4,tblquestoes.textoAlternativa5 as txt5 ,qt1/(qt1+qt2+qt3+qt4+qt5)*100 AS perc1, qt2/(qt1+qt2+qt3+qt4+qt5)*100 AS perc2, qt3/(qt1+qt2+qt3+qt4+qt5)*100 AS perc3,  qt4/(qt1+qt2+qt3+qt4+qt5)*100 AS perc4,  qt5/(qt1+qt2+qt3+qt4+qt5)*100 AS perc5 FROM     
            (tblenquetes INNER JOIN tblquestoes ON tblenquetes.codigoenquete = tblquestoes.codigoenquete)    
            INNER JOIN tblrespostas
            ON (tblrespostas.codigoquestao = tblquestoes.codigoquestao AND tblrespostas.codigoenquete = tblenquetes.codigoenquete);"
                         );
$linha = mysqli_fetch_assoc($dados);
$total = mysqli_num_rows($dados);
?>
<?php
    if($total > 0) {
        do {
?>
                <tr>
                  <td class="um"> <?=$linha('quest')?> </td>
                  <td class="dois"> <?=$linha('txt1')?> </td> 
                  <td class="tres"> <?=$linha('txt2')?> </td>
                  <td class="quatro"> <?=$linha('txt3')?> </td>
                  <td class="cinco"> <?=$linha('txt4')?> </td>
                  <td class="seis"> <?=$linha('txt5')?> </td>
                </tr>
                <tr>
                    <td class="sete"> Quantidades de respostas da questão: <?=$linha('teste')?> </td> 
                    <td class="oito"> <?=$linha('perc1')?>% </td>
                    <td class="nove"> <?=$linha('perc2')?>% </td>
                    <td class="dez"> <?=$linha('perc3')?>% </td>
                    <td class="onze"> <?=$linha('perc4')?>% </td>
                    <td class="doze"> <?=$linha('perc5')?>% </td>
                </tr>
    
                
<?php
        } while($linha = mysqli_fetch_assoc($dados));
    }
?>

<?php
mysqli_free_result($dados);
    ?>

Acredito eu, que um for ou while resolveria, porém não sei aonde encaixaria ele.