Jump to content
Mateus Silva

Yii2 Relations

Recommended Posts

Seguinte:

Recentemente iniciei um projeto e optei por usar o Yii2 no mesmo (utilizo o yii1 no serviço, já estava familiarizado), porém... Notei que nas relations do Yii2, diferente do Yii1, o framework executa 2 queries... por exemplo:

Ao invés de:

SELECT interation.title, interation.message, user.name, user.email
FROM interations AS interation
LEFT JOIN users AS user ON (user.id = interation.user_id)

Ele executaria:

SELECT interation.title, interation.message, user.id
FROM interations AS interation
LEFT JOIN users AS user ON (user.id = interation.user_id)

SELECT * FROM users WHERE id = (id_obtido_a_cima)

Ou seja, enquanto no Yii1 ele cria a relation já buscando todos os dados que preciso, no Yii2, no join, ele apenas trás a FK da tabela que estou relacionando e posteriormente executa um SELECT * pela FK que retornou do join... nada interessante se pensando pra um sistema com muitas linhas de um grid, por exemplo, que em 10 linhas faria 20 consultas, performance vai lá pra vala! Acredito que tenham feito esta atualização por algum motivo que eu desconheço, alguém saberia como "burlar" isso, ou o motivo de ter sido feito desta maneira nesta nova versão?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By manolegal
      Olá amigos(as) do Fórum.
      Tenho um número inteiro no PHP e preciso inseri-lo no Postgresql com 02 casas decimais.
      Defini o campo no Postgresql do tipo numeric(14,2)
      O valor está assim no PHP:
      2961966 Preciso gravar no BD da seguinte maneira:
      29619.66 Porém está gravando da seguinte forma:
      2961966.00 Tentei utilizando number_format, porém não consegui:
      $numero_bd = number_format($numero, '.', ''); $numero_bd = number_format($numero,2,"."); $numero_bd = number_format($numero,2,","numerovalor_ref_15,2,",","."); Caso alguém possa me ajudar, desde já agradeço.
    • By Sapinn
      Opa galera tudo blz? Então, me deparei com um pequeno problema no desenvolvimento de um projeto, eu gostaria que o usuário se mantivesse logado caso ele marcasse um check box com a opção de "Mantenha-me conectado", e até entendo que nessa caso devo usar os cookies do PHP, entretanto, não entendi ainda como usar esse recurso, alguém pode me ajudar??
    • By lezão
      Boa noite!
      Estou tentando fazer um codigo de horario de atendimento, e naun estou tendo resultados.
      Alguem pode me ajudar :
      <?php if ($hoje = 3 & $hoje < 5 & $hora >= 0 & $hora < 08){ echo "<font face='verdana', arial' size=2 color='red'>Fechado</font>";} else if ($hoje > 3 & $hoje < 5 & $hora >= 08 & $hora < 18){ echo "<font face='verdana', arial' size=2 color='red'>Fechado</font>";} else if ($hoje = 3 & $hora >= 18 & $hora < 23){ echo "<font face='verdana', arial' size=2 color='green'>Aberto</font>";} ?>  
    • By AndersonWS
      Meu site está caindo muito nos últimos dias. Basicamente acessa e não aparece nada, uma tela em branco. O pessoal da hospedagem falou que tenho que otimizar o banco de dados e que o problema é esse. Acho estranho pois o mesmo site não caia e agora "do nada" tem esse problema. Fiz um teste de tracert no cmd para ver as rotas e deu a mensagem: Esgotado o tempo limite do pedido. Isso me parece o problema e não o banco de dados.
      Otimização do banco tem alguma coisa a ver com essa mensagem?
      Poderia o site por não estar muito otimizado simplesmente não mostrar nada na tela? Não deveria carregar ao menos o html?
      Se não for o local certo da pergunta me perdoem mas como falaram que o problema era o banco de dados postei aqui.
      Grato.
    • By Felper
      Criei um sistema de login com php e mysql mas não consigo realizar o login mesmo tendo certeza de que os dados foram cadastrados com sucesso. Não sei o que fiz de errado. Vejam o código:
      <?php $login2 = $_POST['loginlogar']; $senha2 = $_POST['senhalogar']; $link = mysqli_connect("localhost", "root", "", "bancolanche") or die("<h1>Não foi possível conectar!!</h1>". mysqli_error()); $banco = mysqli_select_db($link, "bancolanche") or die("<h1>Não foi possível abrir banco de dados!!</h1>". mysqli_error()); $sql = "SELECT login, senha FROM users"; $resulta = mysqli_query($link, $sql); while ($book = $resulta->fetch_object()) { $logindb = $book->login; $senhadb = $book->senha; } if($login2 == "" || $senha2 == ""){ $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Há campos de preenchimento obrigatório em branco.</h1>"; header("Location: logar.php"); } else { if($logindb==$login2 && $senhadb==$senha2){ $_SESSION['msg'] = "<h1 style='color:green'>Logoff realizado com sucesso!</h1>"; header("Location: index.html"); } else { $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Usuário inexistente ou senha incorreta.</h1>"; header("Location: logar.php"); } } mysqli_close($link); ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.