如何实现可加载资源的Laravel模型

时间:2019-04-30 03:43:35

标签: laravel

我有一个Laravel模型,该模型从远程SSH服务器加载资源,然后将返回的数据存储在模型的属性中。这是我的代码的简化版本:

SomeController.php(控制器)

  $foo = new Foo();
  $foo->load(52); // Load resource #52
  echo 'The title of resource #52 is ' . $foo->getTitle();

Foo.php(模型)

  class Foo extends Model
  {
    private $_id;
    private $_title;
    private $_body;

    public function loadResource($id)
    {
      // ...connect to external SSH server and retrieve resource 
      $this->_id = $resource->id;
      $this->_title = $resource->title;
      $this->_body = $resource->body;
    }

    public function getTitle()
    {
      return $this->_title;
    }

    public function getBody()
    {
      return $this->_body;
    }

  }
  • 是否有更好或更惯用的方式来构造此样式,还是应该遵循某种模式?

  • 这种类型的班级有名字吗?

  • 放在模型中是否合适?

1 个答案:

答案 0 :(得分:1)

您可以使用“检索”模型事件来实现这一目标:

https://laravel.com/docs/5.8/eloquent#events

class Foo extends Model
  {

    public static function boot()
    {
        static::retrieved(function (Foo $foo) {
            $foo->resource = getResource();
        )
    }
  }

当从数据库中检索模型时,这会将外部资源绑定到资源属性:

$foo = Foo::find(100);

然后,您可以通过模型中的resource属性获取资源属性。

$foo->resource->id;
$foo->resource->title;
$foo->resource->body;