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.
Publicidade
|
|
Page 1 of 1
Lumine MOR - Dúvida com consulta Muitos para Muitos Dúvida com consulta Muitos para Muitos
#2
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:
Por isto
Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.
@braços e fique com Deus!
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!
#3
Posted 10 March 2011 - 07:51 PM
hufersil, 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:
Por isto
Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.
@braços e fique com Deus!
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)
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.
#4
Posted 10 March 2011 - 08:34 PM
hufersil, 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:
Por isto
Os 4º e 5º parametros são para especificar os campos caso eles não tenham sido mapeados.
@braços e fique com Deus!
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');
$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.
Share this topic:
Page 1 of 1
Similar Topics
| Topic | Forum | Started By | Stats | Last Post Info | |
|---|---|---|---|---|---|
|
Criador de "Epic Mickey" quer transformar mascote em herói de videogame como Mario
|
Notícias |
Notícias
|
|
|
|
Data e hora
como?? |
Dreamweaver |
Thiago Action
|
|
|
|
Jogo"Frogger"
Ajuda com tutorial |
Desenvolvimento de Jogos |
rdr
|
|
|
|
Soluçao para um problema em as3
|
Flash & ActionScript |
Avat4
|
|
|
|
Acquisto Effexor Xr Farmacia In Italia Dei
Compra Compressa Prezzo Venlafaxine |
Eventos | Guest_ridecaurnanny_* |
|
|
|
Companhia do fundador da Wikipedia demite 10% dos funcionários
|
Notícias |
Notícias
|
|
|
|
degradê de "transparência" sobre "banner com alpha" no flash 7
preciso saber se é possível e como! |
Flash & ActionScript |
lfp
|
|
|
|
Zoom com AS3.0
Criar zoom com scroll em as3.0 |
Flash & ActionScript |
junior.c.e
|
|
Publicidade
|
|

Help













