繁体   English   中英

PHP Laravel Eloquent:与子类有很多关系

[英]PHP Laravel Eloquent: has many-relation with child classes

假设我有关系...

abstract class Furniture extends Model{...]
class Chair extends Furniture{...}
class Table extends Furniture(...)

...还有房间的房间...

class Room extends Model{...}

给出以下雄辩的关系...

class Room extends Model{
    public function furnitures(){
        return $this->hasMany("App/Furniture");
    }
}

abstract class Furniture extends Model{
    public function room(){
        return $this->belongsTo("App/Room");
    }
}

我们的目标是,呼吁...

$room->furnitures;

...返回一组不同的继承的家具对象。 所以,如果我做这样的事情:

foreach($this->furnitures as $fur){
    echo get_class($fur)." -> ".get_parent_class($fur)."\n";
}

会导致类似:

Chair -> Furniture
Table -> Furniture
Table -> Furniture
Chair -> Furniture
Chair -> Furniture

现在,这是不可能的,因为默认情况下实例化了抽象类。

是否有可能雄辩地建立这样的关系? 如果是,如何实现呢?

使用静态保留字。 在家具制造方法如

public function getClassName(){
   return static::class;
}

并称之为

foreach($this->furnitures as $fur){
     echo get_class($fur)." -> ".fur->getClassName."\n";

更多信息late-static-bindings

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM