..:: MX Studio Fóruns ::..: Lumine MOR - Dúvida com consulta Muitos para Muitos - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




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

Lumine MOR - Dúvida com consulta Muitos para Muitos Dúvida com consulta Muitos para Muitos

#1 User is offline   Foca 

  • Group: Membros
  • Posts: 4
  • Joined: 09-March 11

Posted 09 March 2011 - 01:42 AM

Olá pessoal,
Estou com o seguinte problema, criei uma estrutura de relacionamento Muitos para Muitos em PHP utilizando a bilbioteca Lumine e ao efetuar uma consulta recebo o erro: Unknown column 't.tenant_id' in 'on clause'

Segue abaixo a estrutura e as configurações que estou utilizando:

TABELAS:
accounts - Registro de usuários do sistema
- id int PK
- email varchar(100) UK
- password varchar(100)
- is_activated tinyint
- is_blocked tinyint

tenants - Registro de Grupos de Usuários
- id int PK
- name varchar(100) UK

tenants_accounts - Tabela vinculo de contas e grupo de contas
- tenant_id int
- account_id int

CLASSES DAO:
AccountsDao - Mapeamento da Tabela accounts do Lumine
- public $tenants = array();
- # Relacionamento muitos para muitos com Classe Tenants
- $this->_addForeignRelation('tenants', self::MANY_TO_MANY, 'TenantsDao', 'tenants', 'tenants_accounts', 'account_id', null);

TenantsDao - Mapeamento da Tabela tenants do Lumine
- public $accounts = array();
- # Relacionamento muitos para muitos com Classe Accounts
- $this->_addForeignRelation('accounts', self::MANY_TO_MANY, 'AccountsDao', 'accounts', 'tenants_accounts', 'tenant_id', null);


CONSULTA SENDO EFETUADA:
$accountDao = new AccountsDao();
$tenantDao = new TenantsDao();
// Recupera a conta do e-mail e tenant para criar a sessão.
$accountDao->alias('ac');
$accountDao->join($tenantDao, 'LEFT', 't', 'id', 'accounts');
$accountDao->limit(1);
$accountDao->where('ac.email = ?', $email);
$accountDao->select('ac.id, ac.email, ac.password, ac.isActivated, ac.isBlocked, t.name as tenant');
$quantity = $accountDao->find();


RESULTADO OBTIDO:
Unknown column 't.tenant_id' in 'on clause'


Se alguém puder me ajudar dizendo o que estou fazendo de errado fico muito grato.
0

#2 User is offline   hufersil 

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

Posted 10 March 2011 - 10:06 AM

Olá,

Seria interessante você postar também o mapeamento feito nas classes.
Caso você tenha feito o mapeamento manualmente, pode ser que haja algum problema de digitação.

Outra coisa, como você está mapeando as classes, troque isto:

$accountDao->join($tenantDao, 'LEFT', 't', 'id', 'accounts');


Por isto


Quote

$accountDao->join($tenantDao, 'LEFT', 't');


Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.

@braços e fique com Deus!
0

#3 User is offline   Foca 

  • Group: Membros
  • Posts: 4
  • Joined: 09-March 11

Posted 10 March 2011 - 07:51 PM

View Posthufersil, on 10 March 2011 - 10:06 AM, said:

Olá,

Seria interessante você postar também o mapeamento feito nas classes.
Caso você tenha feito o mapeamento manualmente, pode ser que haja algum problema de digitação.

Outra coisa, como você está mapeando as classes, troque isto:

$accountDao->join($tenantDao, 'LEFT', 't', 'id', 'accounts');


Por isto


Quote

$accountDao->join($tenantDao, 'LEFT', 't');


Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.

@braços e fique com Deus!



Verificando o Log gerado, o Lumine está gerando a seguinte Query no banco:

Quote

10/03/2011 18:43:21 - LOG: Executando consulta:
SELECT
ac.id, ac.email, ac.password, ac.is_activated, ac.is_blocked, t.name as tenant
FROM
accounts ac
LEFT JOIN tenants_accounts ON
tenants_accounts.account_id = ac.account_id
LEFT JOIN tenants t ON
tenants_accounts.tenant_id = t.tenant_id
WHERE
ac.email = 'reinaldo.coelho@gmail.com' LIMIT 1

(/.../lib/lumine-persistence/lib/Dialect/
MySQL.php, 178)

O que há de errado nessa query é que a tabela "accounts" não tem uma coluna "account_id" e sim uma "id", o mesmo ocorre com a tabela "tenants".

Vou tentar identificar o que posso ter feito de errado no mapeamento para que ele não tente utilizar as colunas com o mesmo nome.

Os mapeamentos foram gerados de forma manual, eu particularmente gosto de entender o que está sendo feito e por isso acabo sofrendo com alguns erros a mais :-)

Vou verificar e se encontrar o erro eu apresento.

Obrigado,
Reinaldo.
0

#4 User is offline   Foca 

  • Group: Membros
  • Posts: 4
  • Joined: 09-March 11

Posted 10 March 2011 - 08:34 PM

View Posthufersil, on 10 March 2011 - 10:06 AM, said:

Olá,

Seria interessante você postar também o mapeamento feito nas classes.
Caso você tenha feito o mapeamento manualmente, pode ser que haja algum problema de digitação.

Outra coisa, como você está mapeando as classes, troque isto:

$accountDao->join($tenantDao, 'LEFT', 't', 'id', 'accounts');


Por isto


Quote

$accountDao->join($tenantDao, 'LEFT', 't');


Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.

@braços e fique com Deus!



Hugo,
Consegui resolver o problema.

No final foram duas coisas:

1 - Retirei o parâmetro que você sugeriu no final do "join", ele estava quebrando a tabela de relacionamento do sistema e o meu resultado era um 1PN.

2 - Encontrei minha falha no mapeamento conforme sugerido, o problema era a coluna que vem logo após a Classe que eu estava mapeando para a coluna referente a coleção da outra classe ao invés de mapear com o ID. A versão correta ficou assim:

Quote

# Relacionamento muitos para muitos com Classe Tenants
$this->_addForeignRelation('tenants', self::MANY_TO_MANY, 'TenantsDao', 'id', 'tenants_accounts', 'account_id');

# Relacionamento muitos para muitos com Classe Accounts
$this->_addForeignRelation('accounts', self::MANY_TO_MANY, 'AccountsDao', 'id', 'tenants_accounts', 'tenant_id');


Hugo, muito obrigado pela paciência e parabéns pelo projeto.

Abraço,
Reinaldo.
0

Share this topic:


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



Publicidade




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