tabla intermedia

70 views
Skip to first unread message

Carlos Gonzalez

unread,
Mar 16, 2016, 2:08:19 PM3/16/16
to CakePHP en Español
Hola buenas a todos

estoy con un proyecto en el que tengo la siguiente bbdd:

usuario es amigo de usuarios (N:M)
usuario crea evento (1:N)
usuario acude a evento (N:M)
usuario crea grupo (1:N)
usuario pertenece a grupo (N:M)

Estoy tratando de crear una vista para la creacion de un evento al cual tengo que invitar a usuarios que sean contactos mios, el problema llega en que no se acceder a esos contactos, solo a todos los contactos.

les dejos los codigos:

Event model

<?php
class Event extends AppModel {

//relacion con user un evento es creado por un usuario
public $belongsTo = array(
       
'User' => array('className' => 'User',
                         
'foreingKey' => 'user_id'      
                       
)
           
);


//relacion n:m con usuarios asisten a muchos eventos
public $hasAndBelongsToMany = array(
       
'Users' => array(
               
'className' => 'User',
               
'joinTable' => 'events_users',
               
'foreingKey' => 'event_id',
               
'associationForeingKey' => 'user_id',
                       
)
);

User model

<?php
App::uses('AuthComponent', 'Controller/Component');
 
class User extends AppModel {

   
//relacion con eventos un usuario crea 0 o varios eventos
   
public $hasMany = array(
       
'Event' => array('className' => 'Event',
                         
'foreingKey' => 'user_id'
                         
       
),
       
'User' => array(
               
'className' => 'User_User',
               
'foreingKey' => 'user_id'
               
       
)
   
);



user_user model

<?php
class User_User extends AppModel {

public $belongsTo = array(
       
'User' => array('className' => 'User',
                         
'foreingKey' => 'user_id'      
                       
)
           
);

}


event controller

<?php

class EventsController extends AppController {

   
public $helpers = array('Paginator');
   
public $components = array(
       
'DebugKit.Toolbar',
       
'Session',
       
'Auth' => array(
           
'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
           
'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
           
'authError' => 'You must be logged in to view this page.',
           
'loginError' => 'Invalid Username or Password entered, please try again.',
           
'authenticate' => array(
               
'Form' => array(
                   
'fields' => array(
                       
'username' => 'email', //Default is 'username' in the userModel
                       
'password' => 'password'  //Default is 'password' in the userModel
                   
)
               
)
           
)
   
));

   
public function beforeFilter() {
        parent
::beforeFilter();
        $this
->Auth->allow('login', 'add');
   
}

   
public function listarTodos() {
        $options
= array('conditions' => array('user_id' => $this->Auth->user('id')));
        $this
->set('eventos', $this->Event->find('all', $options));
   
}

   
public function listarProximos() {
        $options
= array('conditions' => array('user_id' => $this->Auth->user('id'), 'fecha >=' => date('Y-m-d')));
        $this
->set('eventos', $this->Event->find('all', $options));
   
}

   
public function add() {
       
if ($this->request->is('post')):
            $this
->request->data['Event']['user_id'] = $this->Auth->user('id');
            $this
->Event->create();
           
if ($this->Event->save($this->request->data)):
                $this
->Session->setFlash('Event guardado');
                $this
->redirect(array('controller' => 'users', 'action' => 'index'));
            endif
;
        endif
;
       
        $users
= $this->User_User->find('all',array('conditions' => array('OR' => array('User_User.user_id' => $this->Auth->user('id') , 'User_User.user_id1' => $this->Auth->user('id')))));
        $this
->set(compact('users'));
   
}



espero que puedan ayudarme

saludos

pd: el error que me sale por el momento es en la lina del controlador $users = $this->User_User->Find('all',....

Error: Call to a member function find() on a non-object

Pedro Arana

unread,
Mar 19, 2016, 11:48:06 PM3/19/16
to cakep...@googlegroups.com
¿User_User? ¿tienes una tabla de relacion llamada asi?

No recuerdo muy bien pero creo que no deberia ser asi la relación

¿Ya leiste la documentacion?

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm

Saludos
Pedro Arana
> --
> Has recibido este mensaje porque estás suscrito al grupo "CakePHP en
> Español" de Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a cakephp-esp...@googlegroups.com.
> Para publicar en este grupo, envía un correo electrónico a
> cakep...@googlegroups.com.
> Visita este grupo en https://groups.google.com/group/cakephp-esp.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Beware of black-and-white solutions to multi-hued problems.
Reply all
Reply to author
Forward
0 new messages