Example #1
0
 /**
  * This method is to figure out stuff.
  */
 public function init()
 {
     parent::init();
     // If kind is not specified, figure out join type
     if (!isset($this->kind)) {
         $this->kind = $this->weak ? 'left' : 'inner';
     }
     // Add necessary hooks
     if ($this->reverse) {
         $this->owner->addHook('afterInsert', $this, null, -5);
         $this->owner->addHook('beforeUpdate', $this, null, -5);
         $this->owner->addHook('beforeDelete', [$this, 'doDelete'], null, -5);
     } else {
         $this->owner->addHook('beforeInsert', $this);
         $this->owner->addHook('beforeUpdate', $this);
         $this->owner->addHook('afterDelete', [$this, 'doDelete']);
         $this->owner->addHook('afterLoad', $this);
     }
 }
Example #2
0
 /**
  * This method is to figure out stuff.
  */
 public function init()
 {
     parent::init();
     $this->owner->persistence_data['use_table_prefixes'] = true;
     // If kind is not specified, figure out join type
     if (!isset($this->kind)) {
         $this->kind = $this->weak ? 'left' : 'inner';
     }
     // Our short name will be unique
     if (!$this->foreign_alias) {
         $this->foreign_alias = (isset($this->owner->table_alias) ? $this->owner->table_alias : '') . $this->short_name;
     }
     $this->owner->addhook('initSelectQuery', $this);
     // Add necessary hooks
     if ($this->reverse) {
         $this->owner->addHook('afterInsert', $this);
         $this->owner->addHook('beforeUpdate', $this);
         $this->owner->addHook('beforeDelete', [$this, 'doDelete'], null, -5);
         $this->owner->addHook('afterLoad', $this);
     } else {
         // Master field indicates ID of the joined item. In the past it had to be
         // defined as a physical field in the main table. Now it is a model field
         // so you can use expressions or fields inside joined entities.
         // If string specified here does not point to an existing model field
         // a new basic field is inserted and marked hidden.
         if (is_string($this->master_field)) {
             $e = $this->owner->hasElement($this->master_field);
             if (!$e) {
                 if ($this->join) {
                     $e = $this->join->addField($this->master_field, ['system' => true, 'read_only' => true]);
                 } else {
                     $e = $this->owner->addField($this->master_field, ['system' => true, 'read_only' => true]);
                 }
                 $this->master_field = $e->short_name;
             }
         }
         $this->owner->addHook('beforeInsert', $this, null, -5);
         $this->owner->addHook('beforeUpdate', $this);
         $this->owner->addHook('afterDelete', [$this, 'doDelete']);
         $this->owner->addHook('afterLoad', $this);
     }
 }