Re: DB_DataObject and multiple column primary keys
| From: | Olivier Guilyardi | Date: | Fri, 04 Feb 2005 12:28:25 +0000 |
| Subject: | Re: DB_DataObject and multiple column primary keys | ||
| References: | 1 2 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-17380@lists.php.net to get a copy of this message | ||
Alan wrote:
I ran this on it, update facture set currency='GBP' where id=1; seemed ok.No it isn't. The primary key is not id. There may be two _unique_ rows with id = 1. This, because the primary key is a couple or fields : (status,id). MySQL allows you to make a primary key from up to 15 fields. See: http://dev.mysql.com/doc/mysql/en/multiple-column-indexes.html The fix I'm currently using consists in overloading update() with : function update() {
$this->whereAdd("status = '{$this->status}'");
return parent::update();
}
Which, according to the $this->status value, will turn your above query into :
update facture set currency='GBP' where id=1 and status='pending';
OR
update facture set currency='GBP' where id=1 and status='validated';
Given that I did use createTables.php, there may some way to tweak the schema
file, so that it supports my multiple column key. However, I haven't figured out how.
If you have a look at the current code for all this, it's horrifically complex, so I want to try and make this as simple (and predicatable as possible in the future..)Before I take a look, I'd like to be sure we understand each other on what exactly my problem is. -- og