[Ajuda] Como usar ForeignKey?

2 views
Skip to first unread message

( David . RJ . 2K )

unread,
Oct 10, 2009, 7:48:10 PM10/10/09
to SQLReactor Brasil
Estou tentando assim:
function __map()
{
$this->table('m_log');

$this->id = SQLReactor::SerialCol();
$this->user = SQLReactor::ForeignKey(array('target' => array
('DBUser', 'id')));
$this->action = SQLReactor::StringCol(array('length' => 0xFFFF,
'notNull' => true));
$this->date = SQLReactor::DateCol(array('default' => time()));
}

Sendo que ao fazer:
// Cria o usuário padrão
$userAdmin = new DBUser();
$userAdmin->user = 'admin';
$userAdmin->pass = 'admin';
$userAdmin->save();

// Cria o primeiro LOG << esse é o __map que mostrei
$logTest = new DBLog();
$logTest->setUser(1); // ou $logTest->user = 1
$logTest->action = 'O <b>Minimus</b> foi instalado com sucesso!';
$logTest->save();

Não funciona de jeito nenhum.
O estranho é que criou um campo chamado "user_id" no banco, mas
$logTest->user_id também não funciona.

Estou usando da forma incorreta?

Obrigado.

Rafael Martins

unread,
Oct 11, 2009, 1:21:47 PM10/11/09
to sqlreact...@googlegroups.com
David.

Os relacionamentos recebem e retornam objetos (não ids). Portanto numa fk vc deve atribuir o objeto a ser relacionado.
Quando uma classe tem uma FK, o SQLReactor cria automaticamente um atributo com o mesmo nome e sulfixo "Id", onde pode ser atribuido o valor numérico da FK.

Ex:
       // Cria o usuário padrão
       $userAdmin = new DBUser();
       $userAdmin->user = 'admin';
       $userAdmin->pass = 'admin';
       $userAdmin->save();

       // Cria o primeiro LOG << esse é o __map que mostrei
       $logTest = new DBLog();
       $logTest->user = $userAdmin; // ou $logTest->user = 1

       $logTest->action = 'O <b>Minimus</b> foi instalado com sucesso!';
       $logTest->save();

Ou:
       // Cria o usuário padrão
       $userAdmin = new DBUser();
       $userAdmin->user = 'admin';
       $userAdmin->pass = 'admin';
       $userAdmin->save();

       // Cria o primeiro LOG << esse é o __map que mostrei
       $logTest = new DBLog();
       $logTest->userId = $userAdmin->id; //ou o id fixo, diretamente (1)

       $logTest->action = 'O <b>Minimus</b> foi instalado com sucesso!';
       $logTest->save();

[]s,
Snit


2009/10/10 ( David . RJ . 2K ) <davi...@gmail.com>

( David . RJ . 2K )

unread,
Oct 11, 2009, 2:10:56 PM10/11/09
to SQLReactor Brasil
Entendi, vou testar e ver no que dá.

Valeu!
> 2009/10/10 ( David . RJ . 2K ) <david7...@gmail.com>
Reply all
Reply to author
Forward
0 new messages