我有一个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;
}
}
是否有更好或更惯用的方式来构造此样式,还是应该遵循某种模式?
这种类型的班级有名字吗?
放在模型中是否合适?
答案 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;