Как настроить имеет и принадлежит (HABTM) ассоциациям между двумя моделями? - PullRequest
1 голос
/ 11 декабря 2010

Я новичок в торте и столкнулся с одной проблемой, связанной с ассоциацией.

У меня есть три таблицы: users, messages и messages_users, и я использую отношение HABTM для этого в модели сообщений как:

var $hasAndBelongsToMany = array(

'Users' => array (

'className' => 'User',

'join_table' => 'messages_users',

'foreignKey' => 'message_id',

'associationForeignKey' => 'reciever_id',

'conditions'=> array('MessagesUser.reciever_id' => '$this->Session->read("Id")')

)

);

Моя проблема в том, что когда любой пользователь войдет в систему, он должен видеть список полученных им сообщений вместе с именем отправителя в таблице.

Но для меня это отношение выбирает только данные messages_users,

Мой контроллер такой,

<?php

class MessagesController extends AppController {

var $name = 'Messages';

//var $scaffold;

function home($id = null)

{

//$this->Message->id=$id;

//$messages_users = $this->Message->MessagesUser->find('all',array('conditions'=>array('MessagesUser.reciever_id'=>$this->Session->read("Id"))));

$messages_users = $this->Message->MessagesUser->find('all',array('fields'=>array('id','name')));

// $this->set(compact('tags'));

print_r($messages_users);

$this->set('messages_users',$messages_users);

$i=0;

foreach ($messages_users as $messages_user):

$new = $messages_users[$i]['MessagesUser']['sender_id'];

$i++;

print_r($new);

$messages = $this->Message->Users->find('all',array('conditions'=>array('Users.id'=>$new)));

// print_r($messages);

$this->set('messages',$messages);

endforeach;

}

} ?>

Поэтому, пожалуйста, кто-нибудь, помогите мне, как получить результат для этого.

1 Ответ

0 голосов
/ 11 декабря 2010

Из Поваренной книги :

Помните, что ассоциации определены 'в одну сторону'. Если вы определяете пользователя hasMany Рецепт, который не влияет на Рецепт Модель. Вам нужно определить Рецепт принадлежит пользователю, чтобы иметь возможность получить доступ к модели пользователя из вашего рецепта модель

Вы установили отношение в вашей модели пользователей к вашей модели сообщений?

Настроив его, как у вас, вы сможете получать доступ к пользователям из модели сообщений, но не к сообщениям из пользовательской модели.

Ссылка Раздел моделей CookBook на Имеет и принадлежит многим для получения более подробной информации.

...