/** * Remove a record from collection. * @param ActiveRecord $record A record. */ public function remove(ActiveRecord $record) { if (isset($this->join)) { $pk = $this->otherPrimary; $this->join->where($this->thisKey . ' = ?', $this->recordId)->and($this->otherKey . ' = ?', $record->{$pk})->delete(); } else { $key = $this->thisKey; $record->{$key} = null; $record->save(); } }
/** * Set association. * @param ActiveRecord $record A record. * @param array $association Association options. * @param ActiveRecord|Selection|ActiveRecord[] $value New value. * @throws InvalidAssociationException If association type unknown. */ public function setAssociation(ActiveRecord $record, $association, $value) { switch ($association['type']) { case 'belongsTo': if (!isset($value)) { $this->unsetAssociation($record, $association); return; } assume($value instanceof ActiveRecord); assume($value->getModel() == $association['model']); $key = $association['otherKey']; $otherId = $association['model']->primaryKey; $record->{$key} = $value->{$otherId}; return; case 'hasOne': assume($value instanceof ActiveRecord); assume($value->getModel() == $association['model']); $this->unsetAssociation($record, $association); $key = $association['thisKey']; $id = $this->primaryKey; $value->{$key} = $record->{$id}; $value->save(); return; case 'hasMany': $key = $association['thisKey']; $id = $this->primaryKey; $idValue = $record->{$id}; if ($value instanceof Selection) { $value->set($key, $idValue)->update(); return; } if (!is_array($value)) { $value = array($value); } $this->unsetAssociation($record, $association); foreach ($value as $item) { assume($item instanceof ActiveRecord); assume($item->getModel() == $association['model']); $item->{$key} = $idValue; if (!$item->isNew()) { $item->save(); } } return; case 'hasAndBelongsToMany': return; } throw new InvalidAssociationException(tr('Unknown association type: %1', $association['type'])); }
/** * {@inheritdoc} */ public function isNew() { return $this->record->isNew(); }