Oreolek
@Oreolek

ORM в Kohana 3.1?

Схема довольно нетривиальная, и перевести её в ORM я не могу. Писать же через Query Builder не получится, так как придётся перелопачивать сотни строк с ORM объектами.



model.png



Поле Owner ссылается на таблицу users модуля Auth, если интересно.



Проблема в трёх полях таблицы events, которые ссылаются на PRIMARY KEY таблицы days. Как их описать? Постоянно выскакивает ошибка при попытке записи.



Вот модели без чёртовых полей:



class Model_Event extends ORM {<br/>
 protected $_table_columns = array(<br/>
 'id' =&gt; array('data_type' =&gt; 'int', 'is_nullable' =&gt; FALSE),<br/>
 'owner' =&gt; array('data_type' =&gt; 'int', 'is_nullable' =&gt; FALSE),<br/>
 'name' =&gt; array('data_type' =&gt; 'tinytext', 'is_nullable' =&gt; FALSE),<br/>
 'starting_time' =&gt; array('data_type' =&gt; 'time', 'is_nullable' =&gt; FALSE),<br/>
 'ending_time' =&gt; array('data_type' =&gt; 'time', 'is_nullable' =&gt; FALSE),<br/>
 'place' =&gt; array('data_type' =&gt; 'tinytext', 'is_nullable' =&gt; FALSE),<br/>
 'person_in_charge' =&gt; array('data_type' =&gt; 'tinytext'),<br/>
 'seats' =&gt; array('data_type' =&gt; 'int'),<br/>
 'info' =&gt; array('data_type' =&gt; 'mediumtext'),<br/>
 'program' =&gt; array('data_type' =&gt; 'mediumblob'),<br/>
 'verified' =&gt; array('data_type' =&gt; 'bool'),<br/>
 );<br/>
 protected $_has_many = array(<br/>
 'owner' =&gt; array(<br/>
 'model' =&gt; 'user',<br/>
 'foreign_key' =&gt; 'owner')<br/>
 );<br/>
};




class Model_Day extends ORM {<br/>
 protected $_table_columns = array(<br/>
 'day' =&gt; array('data_type' =&gt; 'date', 'is_nullable' =&gt; FALSE),<br/>
 'max_events' =&gt; array('data_type' =&gt; 'int', 'is_nullable' =&gt; FALSE, 'default' =&gt; 10),<br/>
 );<br/>
 protected $_primary_key = 'day';<br/>
};<br/>




Вот упрощённый код записи:

$event-&gt;values(Arr::extract($_POST, array('name','starting_time','ending_time','place','person_in_charge','seats','info'), NULL));<br/>
$event-&gt;owner = Auth::instance()-&gt;get_user()-&gt;id;<br/>
 $starting_day = new Model_Day;<br/>
 $ending_day = new Model_Day;<br/>
 $starting_day -&gt; day = Request::current()-&gt;post('starting_day');<br/>
 $ending_day -&gt; day = Request::current()-&gt;post('ending_day');<br/>
 $opened_until = new Model_Day;<br/>
 $opened_until -&gt; day = Request::current()-&gt;post('opened_until');<br/>
 if (!($starting_day-&gt;find())) $starting_day -&gt; create();<br/>
 if (!($ending_day-&gt;find())) $ending_day -&gt; create();<br/>
 if (!($opened_until-&gt;find())) $opened_until -&gt; create();<br/>
 $event-&gt;add('starting_day',$starting_day);<br/>
 $event-&gt;add('ending_day',$ending_day);<br/>
 $event-&gt;add('opened_until', $opened_until);<br/>
 $event-&gt;create();<br/>




Обращаю внимание на то, что версия Kohana — 3.1.



Пробовал описывать через belongs_to, has_many, соединял оба подхода — не работает. Либо ругается на FOREIGN KEY, либо на отсутсвующие поля starting_day и иже с ним, либо на пустое имя таблицы. Затык происходит именно на строке $event-&gt;add('starting_day',$starting_day);, что характерно.
  • Вопрос задан
  • 4231 просмотр
Решения вопроса 1
dohlik
@dohlik
Метод add() работает только для ManyToMany связей. Для односвязных полей (HasOne, BelongsTo) надо использовать что-то вроде $event->starting_day = $starting_day
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeX
@NeX
public function add($alias, $far_keys)
указывается имя АЛИАСА а не поле. Покажите код моделей (интересуют belongs_to И has_many) day и event
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы