2012-06-25 2 views
0

Я хочу сделать это на мой взгляд, но подмигнули не работает:PHP-ActiveRecord - отношение has_many (пользователи, группы, users_groups)

<?php echo $user->group->name;?> 

У меня есть 3 таблицы

- users (id, name) 
- groups (id, name) 
- users_groups (id, user_id, group_id) 

I имеют 2 модели

class User extends ActiveRecord\Model 
{ 
    static $belongs_to = array(
     array('group', 'through' => 'users_groups') 
    ); 
} 

class Group extends ActiveRecord\Model 
{ 
    static $has_many = array(
     array('users' , 'through' => 'users_groups') 
    ); 
} 

Мое модели неправильны или что-то пропустили? Мне нужна еще одна модель users_groups? Если да, как бы называться?

Мне нужна помощь, я не нашел правильный путь.

Спасибо!

+0

ли вы User_ID здесь? –

+0

Да, в таблице users_groups это отношение. – Sangar82

+0

вы можете получить имя группы пользователей в пользовательском классе, также можете получить список пользователей группы в классе группы –

ответ

2

Решение:

class User extends ActiveRecord\Model 
{ 
    static $has_many = array(
    array('groups', 'through' => 'usersgroups', 'order'=>'id asc'), 
     array('usersgroups') 
    ); 
} 


class Group extends ActiveRecord\Model 
{ 
    static $has_many = array(
     array('users' , 'through' => 'usersgroups'), 
     array('usersgroups') 
    ); 
} 

class UsersGroup extends ActiveRecord\Model 
{ 
    static $table_name = 'users_groups'; 

    static $belongs_to = array(
     array('user'), 
     array('group') 
    ); 
} 

Проблема была с именем третьей модели (UsersGroup в единственном числе)

0
class User extends ActiveRecord\Model 
{ 
    function get_group($user_id){ 
     $query = "SELECT name FROM groups 
        LEFT JOIN users_groups ON (groups.id=users_groups.group_id) 
        LEFT JOIN users ON (users_groups.user_id=users.id)"; 
     $this->group = mysql_fetch_object($query); 
    } 
} 

добавить эту функцию в вашей функции пользователя

+0

Мне нужно сделать php-activerecord (моя проблема в том, что у моих моделей не было соответствующих ассоциаций) – Sangar82

0

Я думаю, что ответ на ваш вопрос в manual. Это пример ассоциации «многие-ко-многим», которую вы пытаетесь реализовать. В этом случае группами являются заказы, а users_groups - платежи.

enter image description here

class Order extends ActiveRecord\Model { 
    static $has_many = array(
    array('payments'), 
    array('users', 'through' => 'payments') 
    ); 
} 

class Payment extends ActiveRecord\Model { 
    static $belongs_to = array(
    array('user'), 
    array('order') 
    ); 
} 

class User extends ActiveRecord\Model { 
    static $has_many = array(
    array('payments') 
    ); 
} 

$order = Order::first(); 
# direct access to users 
print_r($order->users); # will print an array of User object 
+0

Я последовал этому руководству без везения, моя проблема была с третьей моделью, его именем и ассоциациями. – Sangar82

Смежные вопросы