public function ship() { if ($this->status !== self::STATUS_UNSHIPPED) { return false; } $this->beforeShip(); $this->status = self::STATUS_SHIPPED; if (!$this->save(false)) { return false; } $this->afterShip(); return true; }