Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Многие ко многим в ORM
http://forum.kohanaframework.su/viewtopic.php?f=36&t=701
Страница 1 из 1

Автор:  arhont [ 18 июл 2013, 01:04 ]
Заголовок сообщения:  Многие ко многим в ORM

Подскажите, а где указываются поля для промежуточной таблицы. Т.е. в примере, на сайте, где прописано что genre_id лежат ключевые id к таблице genre и тоже самое с фильмами?

Автор:  arhont [ 18 июл 2013, 10:20 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

Понял, нужно добавить 2 дополнительных параметра, например у меня это:

'foreign_key' => 'blog_id',
'far_key' => 'tag_id',

Автор:  WinterSilence [ 19 июл 2013, 03:22 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

неверно, http://kohanaframework.org/3.3/guide/or ... ny-through

Автор:  arhont [ 20 июл 2013, 11:43 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

Что значит неверно, если так работает... И в классе ORM так используется!

в сумме получается так:

Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Model_Blogslistorm extends ORM {
   
 protected $_table_name  = 'blogs';
 
 protected $_has_many = array(
      'tags'  => array(
               'model'   => 'Tagsorm',
               'foreign_key' => 'blog_id',
               'far_key' => 'tag_id',
               'through' => 'tagsblogs',
          )
    );
   
}

Автор:  WinterSilence [ 20 июл 2013, 12:45 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

1. вы пишите код не понимания как он работает,
2. вам указали на пример из оф. документации, там же описаны рекомендации по именованию таблиц и полей бд, если бы вы им следовали, то подобных проблем можно было бы избежать

Автор:  arhont [ 20 июл 2013, 13:22 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

Опять из песни все лошары я супермен...

убираю код в модели:

Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Model_Blogslistorm extends ORM {
   
 protected $_table_name  = 'blogs';
 
 protected $_has_many = array(
      'tags'  => array(
               'model'   => 'Tagsorm',
               'through' => 'tagsblogs',
          )
    );
   
}


В итоге - не работает нефига... Вот тебе и не понимаю...

ошибка:
Database_Exception [ 1054 ]: Unknown column 'tagsblogs.blogslistorm_id' in 'where clause' [ SELECT `tagsorm`.`id` AS `id`, `tagsorm`.`name` AS `name` FROM `tags` AS `tagsorm` JOIN `tagsblogs` ON (`tagsblogs`.`tag_id` = `tagsorm`.`id`) WHERE `tagsblogs`.`blogslistorm_id` = '1' ]

Автор:  WinterSilence [ 20 июл 2013, 13:42 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

мне в конечном итоге выгоднее чтобы все были суперменами, поэтому я и трачу тут свое время. вы просто как в старом анекдоте делаете:
-не заводится?
-ага
-а стекло протирать пробовал?
-ага
-а багажник открыть\закрыть?
-ага
-ну тогда не знаю!

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

Автор:  Sergey [ 21 июл 2013, 21:11 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

Что-то типа этого

Код:
class Model_Post extends ORM {
    /**
     * "Has many" relationships
     * @var array
     */
    protected $_has_many = array(
        'tags' => array(
            'model'       => 'Tag',
            'through'     => 'posts_tags',
            'foreign_key' => 'post_id',
            'far_key'     => 'tag_id'
        ),
    );
}

class Model_Tag extends ORM {
    /**
     * "Has many" relationships
     * @var array
     */
    protected $_has_many = array(
        'posts' => array(
            'model'       => 'Post',
            'through'     => 'posts_tags',
            'foreign_key' => 'tag_id'
        ),
    );
}
 

Автор:  WinterSilence [ 21 июл 2013, 23:27 ]
Заголовок сообщения:  Re: Многие ко многим в ORM

Код:
class Model_Post extends ORM {
    /**
     * "Has many" relationships
     * @var array
     */
    protected $_has_many = array(
        'tags' => array(
            'model'       => 'Tag',
            'through'     => 'posts_tags',
        ),
    );
}

class Model_Tag extends ORM {
    /**
     * "Has many" relationships
     * @var array
     */
    protected $_has_many = array(
        'posts' => array(
            'model'       => 'Post',
            'through'     => 'posts_tags',
        ),
    );
}

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/