laravel - 如何实现加载资源的 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;
}
}
有没有更好或更惯用的方式来构建它,或者我应该遵循某种模式?
这种类型的课程有名称吗?
放置在模型中是否合适?
解决方案
您可以使用“检索”模型事件来实现:
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;
推荐阅读
- c++ - TypeError [ERR_INVALID_CALLBACK]:回调必须是函数(Atom 编辑器上的 C++)
- maven - 无法在服务器上找到 org.talend.ci:builder-maven-plugin:7.1.1
- javascript - 如何根据不同组合框的选定值填充组合框?
- go - 在谷歌云平台中运行数据流时“找不到方案 gs 的文件系统”
- python - 截断十进制值
- r - 如何在 ShinyDashboard R 中显示年初至今的数据?
- android - Recyclerview onItemClick 不工作(无日志)
- laravel - 未找到列:1054 Champ 'feedbacks.student_id
- c++ - C ++:采用右值引用的模板函数重载非模板函数
- python-3.x - Python - 尝试运行我的测试时未找到模块错误