|
@@ -19,37 +19,49 @@
|
|
|
// Magic functions
|
|
|
private function __construct($idOrData){
|
|
|
if(!isset(self::$aliases[$this->name])){
|
|
|
- foreach(static::$belongs_to as $alias => $details){
|
|
|
- self::$aliases[$this->name]['belongs_to'][$alias] = array_merge(
|
|
|
- [
|
|
|
- 'model'=>$alias,
|
|
|
- 'foreign_key'=>$this->name.static::foreign_key_suffix()
|
|
|
- ],
|
|
|
- $details
|
|
|
- );
|
|
|
+ $aliases = [
|
|
|
+ 'belongs_to' => [],
|
|
|
+ 'has_one' => [],
|
|
|
+ 'has_many' => []
|
|
|
+ ];
|
|
|
+ if(is_array(static::$belongs_to)){
|
|
|
+ foreach(static::$belongs_to as $alias => $details){
|
|
|
+ $aliases['belongs_to'][$alias] = array_merge(
|
|
|
+ [
|
|
|
+ 'model'=>$alias,
|
|
|
+ 'foreign_key'=>$this->name.static::foreign_key_suffix()
|
|
|
+ ],
|
|
|
+ $details
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
- foreach(static::$has_one as $alias => $details){
|
|
|
- self::$aliases[$this->name]['has_one'][$alias] = array_merge(
|
|
|
- [
|
|
|
- 'model'=>$alias,
|
|
|
- 'foreign_key'=>$alias.static::foreign_key_suffix()
|
|
|
- ],
|
|
|
- $details
|
|
|
- );
|
|
|
+ if(is_array(static::$has_one)){
|
|
|
+ foreach(static::$has_one as $alias => $details){
|
|
|
+ $aliases['has_one'][$alias] = array_merge(
|
|
|
+ [
|
|
|
+ 'model'=>$alias,
|
|
|
+ 'foreign_key'=>$alias.static::foreign_key_suffix()
|
|
|
+ ],
|
|
|
+ $details
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
- foreach(static::$has_many as $alias => $details){
|
|
|
- self::$aliases[$this->name]['has_many'][$alias] = array_merge(
|
|
|
- [
|
|
|
- 'model'=>$alias,
|
|
|
- 'foreign_key'=>$this->name.static::foreign_key_suffix(),
|
|
|
- 'through'=> null
|
|
|
- ],
|
|
|
- $details
|
|
|
- );
|
|
|
+ if(is_array(static::$has_many)){
|
|
|
+ foreach(static::$has_many as $alias => $details){
|
|
|
+ $aliases['has_many'][$alias] = array_merge(
|
|
|
+ [
|
|
|
+ 'model'=>$alias,
|
|
|
+ 'foreign_key'=>$this->name.static::foreign_key_suffix(),
|
|
|
+ 'through'=> null
|
|
|
+ ],
|
|
|
+ $details
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
+ self::$aliases[$this->name] = $aliases;
|
|
|
+ // Clear relationship definitions to save memory
|
|
|
+ static::$belongs_to = static::$has_one = static::$has_many = null;
|
|
|
}
|
|
|
- // Clear relationship definitions to save memory
|
|
|
- static::$belongs_to = static::$has_one = static::$has_many =null;
|
|
|
if(is_array($idOrData)){
|
|
|
if(isset($idOrData[static::primary_key()]) && self::cached($idOrData[static::primary_key()])){
|
|
|
throw new Exception('Instance already cached');
|
|
@@ -366,15 +378,15 @@
|
|
|
public function related(string $name){
|
|
|
if(!isset($this->_related[$name])){
|
|
|
$aliases = self::$aliases[$this->name];
|
|
|
- if($aliases['belongs_to'][$name]){
|
|
|
+ if(isset($aliases['belongs_to'][$name])){
|
|
|
$alias = $aliases['has_many'][$name];
|
|
|
$class = "Models\\{$alias['model']}";
|
|
|
$this->_related[$name] = $class::fetch([$alias['foreign_key'] => $this->id])[0];
|
|
|
- }elseif($aliases['has_one'][$name]){
|
|
|
+ }elseif(isset($aliases['has_one'][$name])){
|
|
|
$alias = $aliases['has_many'][$name];
|
|
|
$class = "Models\\{$alias['model']}";
|
|
|
$this->_related[$name] = $class::instance($this[$alias['foreign_key']]);
|
|
|
- }elseif($aliases['has_many'][$name]){
|
|
|
+ }elseif(isset($aliases['has_many'][$name])){
|
|
|
$alias = $aliases['has_many'][$name];
|
|
|
$class = "Models\\{$alias['model']}";
|
|
|
$sql = "select ";
|