cuya relación cakephp se debe utilizar para los grupos de usuarios? puede haveMany uso matriz para foreign_ID?

StackOverflow https://stackoverflow.com/questions/2390737

Pregunta

En mi solicitud de tenis, mi mesa 'partido' tiene dos jugadores (obviamente). He usado player1_id y player2_id como una manera de realizar un seguimiento de los identificadores de usuario. No he incluido una clave externa user_id sin embargo.

También hay un 'usuario' mesa donde quiero tirar de los nombres de los jugadores de.

Debido a 'partido' tiene más de un usuario y los usuarios tienen más de un modelo, me pregunto si la siguiente configuración del modelo funcionará:

Me he configuración del modelo de usuario de esta manera:

var $name = 'User';
var $hasMany = array(
'Match' => array(
'className' => 'Match',
'foreignKey' => array( 'player1_id', 'player2_id'),
'dependent' => true,
)

y el modelo de partido de la siguiente manera:

var $name = 'Match';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' =>  'user_id',
'conditions' => '',
)

necesito para mostrar al usuario nombre / apellido para cada jugador, donde user_id = player1_id o player2_id. esto funcionara? ¿Puede una clave externa utilizar una matriz? Y puede una operación modelo de uso de una 'o' cuando se busca?

O hay una mejor manera de estructurar una mesa (como un partido, o podría ser una reunión de grupo) con más de un usuario?

Cheers, Paul

¿Fue útil?

Solución

No creo que una matriz como una clave externa en el usuario> Partido relación iba a funcionar, pero por otra parte nunca he intentado. La única Partido> relación del usuario con user_id como el exterior no funcionará sin embargo, ya que, como ha dicho, ese id extranjera no existe.

Conceptualmente la manera más limpia sería una relación adecuada hasAndBelongsToMany. Después de todo, un partido tiene muchos jugadores, y los jugadores tienen muchas coincidencias. Así que realmente estás en una relación de muchos a muchos.

Para fingir con una relación belongsTo / hasMany, que tendría que hacer esto:

// user model
var $hasMany = array(
   'MatchAsPlayer1' => array(
       'className'  => 'Match',
       'foreignKey' => 'player1_id',
   ),
   'MatchAsPlayer2' => array(
       'className'  => 'Match',
       'foreignKey' => 'player2_id',
   )
);

// match model
var $belongsTo = array(
    'Player1' => array(
        'className'  => 'User',
        'foreignKey' =>  'player1_id'
    ),
    'Player2' => array(
        'className'  => 'User',
        'foreignKey' =>  'player2_id'
    )
);

La parte fea es en el modelo de usuario, donde recibiría partidos relacionada dividido en ['MatchAsPlayer1'] y ['MatchAsPlayer2']. Se podría hacer un poco de engaño en la devolución de llamada afterFind fusionar esos, pero no es una solución agradable en general. Sólo tiene que ir para la hasAndBelongsToMany. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top