Когда я использую PHP и Propel ORM 2.0.0-dev для обновления строки в таблице с помощью поведения с отметкой времени, он всегда задает поле made_at, а также поле updated_at, что означает, что они всегда одинаковы. Я хочу, чтобы create_at отражал время создания строки, а не время ее последнего изменения. Вот мой код, что я делаю не так?
$person = PeopleQuery::create()->findOneByUserid($vals->userid);
if (is_null($person)) $person = new People();
$person->setUserid($vals->userid);
$person->setAddress($vals->address);
$person->setCity($vals->city);
$person->setState($vals->state);
$person->setZip($vals->zip);
$person->setCountry($vals->country);
$person->setClientIP($vals->clientIP);
$person->save();
Таблица:
<table name="people" idMethod="native" phpName="People">
<column name="userid" phpName="Userid" type="INTEGER" primaryKey="true" required="true"/>
<column name="address" phpName="Address" type="VARCHAR" required="true"/>
<column name="city" phpName="City" type="VARCHAR" required="true"/>
<column name="state" phpName="State" type="VARCHAR" required="true"/>
<column name="zip" phpName="Zip" type="VARCHAR" required="true"/>
<column name="country" phpName="Country" type="VARCHAR" required="true"/>
<column name="clientIP" phpName="ClientIP" type="VARCHAR"/>
<vendor type="mysql">
<parameter name="Engine" value="InnoDB"/>
</vendor>
<behavior name="timestampable" />
</table>
Изменение кода, чтобы он не касался столбца первичного ключа при обновлении не удерживает Propel от обновления поля create_at:
$person = PeopleQuery::create()->findOneByUserid($vals->userid); // so that it does both inserts and updates
if (is_null($person)) {
$person = new People();
$person->setUserid($vals->userid);
echo '<p>Did NOT find person</p>';
} else {
echo '<p>Found person</p>';
}
$person->setAddress($vals->address);
$person->setCity($vals->city);
$person->setState($vals->state);
$person->setZip($vals->zip);
$person->setCountry($vals->country);
$person->setClientIP($vals->clientIP);
$person->save();
Задача ещё не решена.
Других решений пока нет …