Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lukoBR

[Resolvido] Associar usuário à um Ticket no CakePHP

Recommended Posts

Olá pessoas!

 

Estou com um probleminhão, tenho um sistema de tickets com os seguintes arquivos/funções:

 

TicketController->view();

function view($id = null) {
	$tickets = $this->Ticket->find("Ticket.id = '$id' AND user_id = {$this->Auth->user('id')}");
	$this->set(compact('tickets'));
}

Model - Classe Ticket

<?php
class Ticket extends AppModel {
var $name = 'Ticket';

var $hasMany = array(
	'Reply' => array(
		'className' => 'tickets_replies',
		),
	);
}
?>

View - view.tpl (troquei a extensão padrão pelo app_controller.php)

<?php if(empty($tickets)) { ?>
	<?php __('The ticket you are looking for does not exist.'); ?>
<?php } else { ?>

<?php foreach($tickets['Reply'] as $reply) { ?>
<table width="100%" border="0">
  <tr>
    <td width="10%">
////////////////////////////////////////////
// Aqui deveria exibir o usuário, só consegui o ID, $reply['username'] não exibe nada além de index não encontrada
//
    	<?php echo $reply['user_id']; ?>
//    	<?php echo $reply['username']; ?> // Não pega, index não encontrada
////////////////////////////////////////////
    </td>
    <td>
       	<?php echo $reply['message']; ?>
    </td>
  </tr>
</table>
<?php } // end foreach ?>
<?php } // end else ?>

Queria que pegasse o id do usuario que respondeu o ticket, na tabela replies, e procurasse na tabela users o usuário que possui o mesmo id para exibir suas informações.

 

Alguma dúvida?

Agradeço muito a ajuda. OBRIGADO!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça a query assim e de um "pr" no resulto. Verifique se é oque espera:

$opt['conditions'] = array('Ticket.id' => $id, 'user_id' => $this->Auth->user('id'));
$result = $this->Ticket->find('first', $opt);
pr($result);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já havia dado um pr(), ele exibe o seguinte:

Array
(
    [Ticket] => Array
        (
            [id] => 2
            [user_id] => 1
            [department_id] => 1
            [created] => 2010-02-25 02:37:50
            [tittle] => Não consigo acessar minha conta!
            [message] => testeteste
        )

    [User] => Array
        (
            [id] => 1
            [username] => teste
            [password] => f1f657ff98da2f3e7558bbf4a9674d1362920fe2
        )

    [Reply] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [ticket_id] => 2
                    [user_id] => 2
                    [created] => 2010-03-02 22:50:23
                    [message] => asd
                )

            [1] => Array
                (
                    [id] => 3
                    [ticket_id] => 2
                    [user_id] => 3
                    [created] => 2010-03-13 20:24:49
                    [message] => testedaa
                )

        )

)

No finalzinho onde deveria pegar o user_id (no caso do pr() '2' e '3' respectivamente) e procurar na tabela users para obter informações como o e-mail por exemplo...

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você quer mostrar as informações do usuario no "reply"?

Mostre como está seu model.

Lembre se colocar:

var $belongsTo = array('User');
E colocar antes do find:

$this->recursive = 2;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é isso que eu quero.

 

O $this->recursive = 2 não obteve efeito, e o $belongsTo já estava colocado.

 

Meu model:

<?php
class Ticket extends AppModel {
var $name = 'Ticket';

var $hasMany = array(
	'Reply' => array(
		'className' => 'tickets_replies',
		),
	);

var $belongsTo = array(
	'User' => array(
		'className' => 'users',
		)
	);
}
?>

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quem "pertence à" um User é Reply e não TIcket certo?

Você colocou no model errado. Reply belongsTo User.

 

Então tenho que criar um model para as replies e usar no meu controller

var $uses = array('Ticket', 'Reply');

É isso?

 

Grato pela ajuda ;)

PS.: Desculpe os quotes desnecessários, eu ainda não me acostumei =X

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, problema resolvido, só estou com uma duvida em relação a internacionalização...

Se eu tenho o código a seguir

function teste($id = null) {
// mysql, tudo ok //
    $this->Session->setFlash(__("The ticket {$id} has been closed.", true));
}

Queria que o $id fosse de acordo com o setado no setFlash

 

Por exemplo:

msgid "The ticket %id has been closed."
msgstr "O ticket %id foi fechado."
Só que não consigo tornar %id "dinâmico"

 

Grato, OBRIGADO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui =P

 

No Controller

$this->Session->setFlash(sprintf(__("The ticket %s has been closed.", true), $id));

No arquivo de idioma app/locale/pt_BR/LC_MESSAGES/default.po

msgid "The ticket %s has been closed."
msgstr "O ticket %s foi fechado."

Grato pela ajuda, espero também ter ajudado outros usuarios com esta dica

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.