Схема довольно нетривиальная, и перевести её в ORM я не могу. Писать же через Query Builder не получится, так как придётся перелопачивать сотни строк с ORM объектами.
Поле Owner ссылается на таблицу users модуля Auth, если интересно.
Проблема в трёх полях таблицы events, которые ссылаются на PRIMARY KEY таблицы days. Как их описать? Постоянно выскакивает ошибка при попытке записи.
Вот модели без чёртовых полей:
class Model_Event extends ORM {<br/>
protected $_table_columns = array(<br/>
'id' => array('data_type' => 'int', 'is_nullable' => FALSE),<br/>
'owner' => array('data_type' => 'int', 'is_nullable' => FALSE),<br/>
'name' => array('data_type' => 'tinytext', 'is_nullable' => FALSE),<br/>
'starting_time' => array('data_type' => 'time', 'is_nullable' => FALSE),<br/>
'ending_time' => array('data_type' => 'time', 'is_nullable' => FALSE),<br/>
'place' => array('data_type' => 'tinytext', 'is_nullable' => FALSE),<br/>
'person_in_charge' => array('data_type' => 'tinytext'),<br/>
'seats' => array('data_type' => 'int'),<br/>
'info' => array('data_type' => 'mediumtext'),<br/>
'program' => array('data_type' => 'mediumblob'),<br/>
'verified' => array('data_type' => 'bool'),<br/>
);<br/>
protected $_has_many = array(<br/>
'owner' => array(<br/>
'model' => 'user',<br/>
'foreign_key' => 'owner')<br/>
);<br/>
};
class Model_Day extends ORM {<br/>
protected $_table_columns = array(<br/>
'day' => array('data_type' => 'date', 'is_nullable' => FALSE),<br/>
'max_events' => array('data_type' => 'int', 'is_nullable' => FALSE, 'default' => 10),<br/>
);<br/>
protected $_primary_key = 'day';<br/>
};<br/>
Вот упрощённый код записи:
$event->values(Arr::extract($_POST, array('name','starting_time','ending_time','place','person_in_charge','seats','info'), NULL));<br/>
$event->owner = Auth::instance()->get_user()->id;<br/>
$starting_day = new Model_Day;<br/>
$ending_day = new Model_Day;<br/>
$starting_day -> day = Request::current()->post('starting_day');<br/>
$ending_day -> day = Request::current()->post('ending_day');<br/>
$opened_until = new Model_Day;<br/>
$opened_until -> day = Request::current()->post('opened_until');<br/>
if (!($starting_day->find())) $starting_day -> create();<br/>
if (!($ending_day->find())) $ending_day -> create();<br/>
if (!($opened_until->find())) $opened_until -> create();<br/>
$event->add('starting_day',$starting_day);<br/>
$event->add('ending_day',$ending_day);<br/>
$event->add('opened_until', $opened_until);<br/>
$event->create();<br/>
Обращаю внимание на то, что версия Kohana — 3.1.
Пробовал описывать через belongs_to, has_many, соединял оба подхода — не работает. Либо ругается на FOREIGN KEY, либо на отсутсвующие поля starting_day и иже с ним, либо на пустое имя таблицы. Затык происходит именно на строке
$event->add('starting_day',$starting_day);
, что характерно.