Kohana Связи в кохане 3.3

fawkes

Новичок
Мануал смотрел не раз, пробовал не раз. Все в точности как в мануале.
Есть таблицы rights и users, связь 1:М;
В rights поля:
В users поля:
Заметьте, все поля написаны по соглашению.

Модель user
PHP:
<?php defined('SYSPATH') or die('No direct script access.');

class Model_User extends ORM
{
    protected $_table_name = 'Users';

    public function get_all()
    {
        return  ORM::factory('User')->find_all();
    }

}
модель right
PHP:
<?php defined('SYSPATH') or die('No direct script access.');

class Model_Right extends ORM
{
    protected $_table_name = 'Rights';

    protected $_has_many = array(
        'users' => array(
            'model' => 'user', 
            'foreign_key' => 'right_id' 
        ),
    );

    public function get_all()
    {
       $rights = ORM::factory('Right', 2); // если вторым аргументом не передавать - вывода на странице нет, а если передать, тогда unknown column in 'where clause'
       $users = $rights->users->find_all();
        foreach ($users as $user) {
            echo $user->id_user.'<br>';
        }
    }
в контроллере
PHP:
 Model::factory('Right')->get_all();
из всех попыток вывести все данные из двух таблиц, заканчивались ошибками, либо просто никакого вывода не было.
Локалка на винде, регистр не имеет значения.

Что я делаю не так?
Голова уже пухнет :(
 

Adelf

Administrator
Команда форума
По соглашению первичные ключи должны называться просто id. Это в 3.2 так. в 3.3 врядли поменялось.
 

fawkes

Новичок
Блиииин, менял их раньше, так жаловалась, на то что не находила старые первичные ключи. Хотя изза $_table_name кэш не должен работать...
Ладно. Как вывести все записи, а не по определенному айдишнику?

PHP:
$rights = ORM::factory('Right', 2); // find_all() не пройдет же
       $users = $rights->users->find_all();
        foreach ($users as $user) {
            echo $user->id.' - '.$rights->role.' - '.$user->name.'<br>';
        }
 

fawkes

Новичок
Потому что далее так не обратишься ...
PHP:
$rights->users->find_all();
PHP:
ErrorException [ Notice ]: Undefined property: Database_MySQL_Result::$users
 

Adelf

Administrator
Команда форума
fawkes
если тебе нужно вывести все rights а потом всех users для каждой, то так и делай.
Только надо сделать foreach($rights as $right).
 

fawkes

Новичок
мне нужно вывести все rights и users одновременно, в одну таблицу
 

Adelf

Administrator
Команда форума
в каком порядке? Обрисуй? Дай пример?
 

Adelf

Administrator
Команда форума
Что ж ты с другого конца проблему решаешь?
Вот попробуй визуализировать свои мысли и все встанет на свои места.
Тебе нужен список ЮЗЕРОВ, у каждого указать его роль.

Вот и строим код соответсвующе.
PHP:
$users = ORM::factory('User')->find_all();
foreach ($users as $user) {
  echo $user->id.' - '.$user->right->role.' - '.$user->name.'<br>';
}
Вот только тебе нужно будет еще добавить к модели users связь 1 к 1, с ролью. свойство $belongs_to. Гугл поможет :) или любой хелп по кохановской ORM
 

Adelf

Administrator
Команда форума
Хотя оптимальнее будет сделать ORM::factory('Right')->find_all() и разложить по массиву. с ключом по id. и потом по right_id искать легко.
 

fawkes

Новичок
Хотя оптимальнее будет сделать ORM::factory('Right')->find_all() и разложить по массиву. с ключом по id. и потом по right_id искать легко.
PHP:
       $rights = ORM::factory('Right')->find_all();
       //$users = $rights->users->find_all();
        foreach ($rights as $right) {
            echo $right->id.' - '.$right->role.' - '.$right->name.'<br>';
        }
так?
 

Adelf

Administrator
Команда форума
Я больше не буду ничего писать. Я сказал тебе всю нужную инфу. Внимательно прочитай, подумай. Посмотри что в твоих обьектах.. И сделай одно умное заключение - тебе нужно вывести не список ПРАВ! а список ЮЗЕРОВ!
 

fawkes

Новичок
Я больше не буду ничего писать. Я сказал тебе всю нужную инфу. Внимательно прочитай, подумай. Посмотри что в твоих обьектах.. И сделай одно умное заключение - тебе нужно вывести не список ПРАВ! а список ЮЗЕРОВ!
уже все сделал, спасибо
 
Сверху