tags:

views:

44

answers:

1

Following Models:

class User extends Doctrine_Record {
    public function setTableDefinition() {
        $this->hasColumn ( 'iron', 'integer', 4 );
    }

    public function setUp() {
        $this->hasMany ('Field as Fields', array(
            'local' => 'id',
            'foreign' => 'owner_id'
        ));
    }
}

class Field extends Doctrine_Record {
    public function setTableDefinition() {
        $this->hasColumn('owner_id','integer',4);
        $this->hasColumn('ressource_id','integer',4);
        $this->hasColumn('ressource_amount','integer','2');
    }

    public function setUp() {
        $this->hasOne('User as Owner',array(
                'local' => 'owner_id',
                'foreign' => 'id'
        ));
    }
}

And I try following DQL:

$sqlRessourceUpdate = Doctrine_Query::create()
->update('Field f')
->set('f.Owner.iron','f.Owner.iron + f.ressource_amount')
->where('f.ressource_id = ?',1);

Result:

'Doctrine_Query_Exception' with message 'Unknown component alias f.Owner'

Basicly I just want to update the "iron" attribute from the Field-Owner according to the fields' value

+1  A: 

I am guessing you can't reference other tables like that in your query.

This may not be the best way but, here is what I do

$q = Doctrine_Query::create()
    ->select('*')
    ->from('Field')
    ->where('ressource_id = ?',1); //btw resource has one 's'

$field = $q->fetchone();

$field->Owner['Iron'] += $field->ressource_amount;
$field->save();

EDIT: Actually I don't know if that will work... this is more like what I do

$q = Doctrine_Query::create()
    ->select('*')
    ->from('Field')
    ->where('ressource_id = ?',1); //btw resource has one 's'

$field = $q->fetchone();

$user = $field->Owner;
$user['Iron'] += $field->ressource_amount; // I have never used a += like this, but in theory it will work.
$user->save();
Justin Giboney
thanks. I'm doing something similar now.It should be noted that the save() method is very slow and kicks of a LOT of queries, depending on your models.In my case above it resulted in about 100 queries per user. If you want performance, save manually. thx for the "s" correction btw. Always getting that wrong ;)
SkaveRat