CodeIgniter Присоединиться Поля Помощь? - PullRequest
0 голосов
/ 22 ноября 2011

Мне нужна помощь в создании ORM-запроса CodeIgniter Datamapper, который включает поля соединения.У меня есть таблица Торговцы и таблица Продавцы .Они имеют отношение многие-к-одному, то есть многие Торговцы являются частью единого Продавца .

Таким образом, мои таблицы баз данных, следующие за ORM Datamapper ORMКонвенция:

торговцы

продавцы

торговцы_вендоры

Кроме того,в таблице merchants_vendors у меня есть объединяемые поля 'role' и 'admin'.Очевидно, что эти данные должны быть помещены в таблицу соединений, если бы они были помещены в таблицу Merchants , я бы не смог определить роли и администраторов для Vendor .

Наконец, Торговцы связаны с пользователями отношениями один-к-одному.Подумайте о Merchants как о расширении Users .

Я пытаюсь создать массив PHP из данных, следующих этой структуре данных, но я не могу 'Похоже, что роли и поля администратора заполнены правильно.Я удалил лишние столбцы для вашей простоты:

[vendor] => Array
        (
            [id] => 1
            [name] => Vendor1
            [users] => Array
                (
                    [0] => Array
                        (
                            [id] => 277
                            [username] => merchant1
                            [firstname] => Merchant1
                            [merchant] => Array
                                (
                                    [id] => 1
                                    [user_id] => 277
                                    [role] => Sales
                                    [admin] => 0
                                )

                        )

                    [1] => Array
                        (
                            [id] => 282
                            [username] => merchant2
                            [firstname] => Merchant2
                            [merchant] => Array
                                (
                                    [id] => 2
                                    [user_id] => 282
                                    [role] => Software
                                    [admin] => 1
                                )

                        )

                )

        )

Вот код, который я использую - при условии, что мы знаем идентификатор поставщика:

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();
            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
        }
    }
}
$this->load->view('myview', $d);

Это дает мне понять, как выше PHPструктура данных без роли и администратора. Мне хорошо известна функция include_join_fields(), но я не могу заставить ее работать.В частности, я попытался $m->vendor->include_join_fields(); Затем попытался получить доступ к полям роли / администратора с помощью $mV->vendor->join_role и $mV->vendor->join_admin - но это не работает.

Ваша помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

include_join_fields () ничего не выполняет, он просто устанавливает флаг, что вы хотите, чтобы эти поля были включены.

В обоих примерах выше отсутствует get (), который фактически выполняет запрос ...

0 голосов
/ 22 ноября 2011

Решением было использование include_join_fields () для объекта $ mV внутри forloop:

$v = new Vendor($id);
if($v->exists())
{
    $d['vendor'] = $v->to_array();
    $m = new Merchant();
    $m->where_related_vendor('id', $v->id)->get();
    if($m->exists())
    {
        foreach($m as $mK => $mV)
        {  
            $u = new User();
            $u->where_related_merchant('id', $mV->id)->get();

            $mV->vendor->where('id', $v->id)->include_join_fields();

            $d['vendor']['users'][$mK] = $u->to_array();
            $d['vendor']['users'][$mK]['merchant'] = $mV->to_array();
            $d['vendor']['users'][$mK]['merchant']['role'] = $mV->vendor->join_role;
            $d['vendor']['users'][$mK]['merchant']['admin'] = $mV->vendor->join_admin;
        }
    }
}
$this->load->view('myview', $d);

Текущее обсуждение на форумах CodeIgniter .

Я буду публиковать дополнительную информацию по мере ее поступления.

...