rhaco: データベース操作(update)
project.xmlでrequire="true"になっている場合はupdateの際にrequireの項目にダミーデータを入れてあげてください。ダミーを入れないとエラーが出ます。
その他unique="true"が設定されている場合はuniqueのカラムにダミーを入れたTableObjectを作成しQ::equalでuniqueのカラムを別途指定してあげないとエラーが出ます。例えばusersテーブルのidがunique="true"に設定されていてemailカラムを更新したい場合は下記の通りです。
$id = 10; $users = $users_db->get(new Users(), new Criteria( Q::equal(Users::columnId(), $id) )); $users->setId(0); $users_db->update($users, new Criteria(Q::equal(Users::columnId(), $id), Q::which(Users::columnEmail())));
という感じになります(テストしていません)。
updateは何気に面倒くさいことが多いので注意してください。
project.xml
<project rhacover="1.6.1" version="0.0.1" name="rhaco_test" xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rhaco.org http://m.rhaco.org/xsd/project_1_6_x.xsd"> <database name="rhaco"> <table name="items" admin="true"> <column name="id" type="serial" /> <column name="name" type="string" require="true" /> <column name="email" type="email" unique="true" require="true" /> <column name="body" type="string" unique="true" require="true" /> <column name="created" type="timestamp" default="sysdate" /> </table> </database> </project>
index.php
require('__init__.php'); Rhaco::import('database.DbUtil'); Rhaco::import('model.Items'); $db = new DbUtil(Items::connection()); $items = new Items(); $items->setEmail('yourname@hostname.com'); $items->setBody('This is body.'); // SQLはUPDATE items SET email='yourname@hostname.com', body='This is body' WHERE name='Your Name' と同等 $criteria = new Criteria( Q::equal(Items::columnName(), 'Your Name') Q::which(Items::columnEmail()), Q::which(Items::columnBody()) ); $db->update($items, $criteria);