Я делаю все с Propel, что, вероятно, немного крайний случай - в частности, я обнаружил, что имя класса, связанное с именем таблицы, где-то кешируется, и из-за моей перестройки модели с другим Имена классов, но те же имена таблиц (для целей модульного тестирования) Propel идет в правильном направлении. (Вам не понадобится опыт работы с Propel для этого вопроса; просто понимание PHP, возможно, магические вызовы в частности) .
Чтобы устранить эту проблему, я обнаружил, что Propel заполняет класс «tablemap» для таблицы, когда устанавливается значение столбца. Мое намерение состоит в том, чтобы выяснить, где в коде происходит это заполнение, чтобы я мог очистить кэшированные таблицы таблиц в Propel.
В частности, класс TestOrganiser имеет сгенерированный родительский BaseTestOrganiser, и у него есть метод установки столбца, таким образом:
// The ** lines are mine, the rest are auto-generated by propel.
// The output when setting a value and saving is "no yes " which
// shows that the '$this->modifiedColumns[]' line triggers the
// tablemap population
public function setName($v)
{
if ($v !== null) {
$v = (string) $v;
}
if ($this->name !== $v) {
$this->name = $v;
$map = Propel::getDatabaseMap('test'); // **
echo $map->getTables() ? 'yes ' : 'no '; // **
$this->modifiedColumns[] = TestOrganiserPeer::NAME;
echo $map->getTables() ? 'yes ' : 'no '; // **
}
return $this;
} // setName()
Согласно комментариям, значение $ map-> getTables () перемещается из пустого в непустое в результате строки $this->modifiedColumns[] = TestOrganiserPeer::NAME
. Однако в этом классе, его потомке или родителях нет метода __set (), поэтому я совершенно не понимаю, какой код может быть запущен здесь.
Есть идеи?