Yii сводные таблицы

Немного изврата. Кто может посоветовать что лучше- пишите в комментариях или в личку.

Предположим есть база


нас интересует такой вопрос - как связать данные из нескольких таблиц (да даже без модели) в одну.

возьмем самый простой пример.

analiz_create - таблица анализов. одному анализу соответсвует несколько элементов.
analiz_data - хранит данные

чтобы ввести в analiz_data данные, нужно знать какие столбцы соответствуют определенному анализу.

    $connection = Yii::app()->db;
    $sql = "
                            SELECT  t2.id AS id_elem,
                                    t2.name,
                                    t3.name AS TYPE,
                                    t2.f_filter,
                                    t2.name_pk,
                                    t2.name_value,
                                    t2.comment
                            FROM a_template_has_elem t1,
                                 a_element t2,
                                 a_elem_type t3
                            WHERE template_id =$id_template
                              AND t1.elem_id = t2.id
                              AND t2.type_id=t3.id                             
                            order by f_order;
                            ";
    $dataReader = $connection->createCommand($sql)->query();
    $rows = $dataReader->readAll();   
    for($i = 0, $cnt = count($rows); $i < $cnt; $i++)
    {
        $id = $rows[$i]['id_elem'];
        $typeel = $rows[$i]['type']; 
                echo '<div class="column">';
                echo CHtml::label($rows[$i]['name'], $rows[$i]['name']);
                echo CHtml::textField("elem[$id][val][]", '', array('id' => $rows[$i]['name']));
                echo '</div>'; 

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

                if (isset($_POST['elem']))
                    {
                        $command = Yii::app()->db->createCommand();
                        $max = Yii::app()->db->createCommand()
                                ->select('max(id) as max')
                                ->from('a_analiz_create')
                                ->queryScalar();

                        $Ids = $_POST['elem'];
                         $cnt = max(array_keys($Ids));
                        $min = min(array_keys($Ids));
                        for($i = $min; $i <= $cnt; $i++)
                        {
                            $type = $Ids[$i]['type'][0];
                            $val = $Ids[$i]['val'][0];
                            if ($type == 'float')
                            {
                                (real)$val = str_replace(',','.',$val);                                 
                            }
                            else if ($type == 'int')
                            {
                                $val = (int)$val;                                 
                            }   
                            if (isset($val) && !empty($val))
                                $command->insert('a_analiz_data', array(
                                    'analiz_id' => $max, 
                                    'value' => $val,
                                    'elem_id' => $i,
                                    'user_id' => Yii::app()->user->id,
                                ));
                        }
                    };
         
то вставляем данные при помощи sql запроса, не пользуясь стандартными средствами.


Комментарии

Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Учебник yii2