首页 > 解决方案 > 如何实现加载资源的 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;
    }

  }

标签: laravel

解决方案


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

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);

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

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

推荐阅读