Yii сводные таблицы
Немного изврата. Кто может посоветовать что лучше- пишите в комментариях или в личку.
Предположим есть база
нас интересует такой вопрос - как связать данные из нескольких таблиц (да даже без модели) в одну.
возьмем самый простой пример.
analiz_create - таблица анализов. одному анализу соответсвует несколько элементов.
analiz_data - хранит данные
чтобы ввести в analiz_data данные, нужно знать какие столбцы соответствуют определенному анализу.
здесь я из таблицы a_template_has_elem получаю список полей и отображаю их.
в контролере тогда
Предположим есть база
нас интересует такой вопрос - как связать данные из нескольких таблиц (да даже без модели) в одну.
возьмем самый простой пример.
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 запроса, не пользуясь стандартными средствами.
Комментарии
Отправить комментарий