我有一个基本的页面模型,它通常会保存相同类型的数据,但是偶尔,我可能需要向记录添加一些额外的信息。
有什么方法可以将自定义字段/元数据添加到记录中,就像 Wordpress 允许的那样?
任何建议表示赞赏。
谢谢
一种可能的解决方案是使用像这样的作曲家包:
https://packagist.org/packages/navruzm/lmongo
该软件包在其 Github 页面上得到了很好的解释。
这将允许您的 Eloquent 模型使用 MongoDB 驱动程序。此外,如果您使用接口/类进行开发(此处和此处Repository
很好地介绍了关注点分离技术),那么上述包将允许您将 MongoDB 用于您的页面,但不能用于应用程序中的其他资源。
一个例子:
app/src/ExampleAppName/Repository/Page
在该文件夹中创建一个文件PageRepositoryInterface.php
,看起来(大致)如下:
<?php namespace ExampleAppName\Repository\Page;
interface PageRepositoryInterface {
public function all();
public function find($id);
public function create($input);
//... and so on
}
在同一个文件夹MongoPageRepository.php
中创建另一个文件,看起来(大致)如下:
<?php namespace ExampleAppName\Repository\Page;
class MongoPageRepository implements PageRepositoryInterface {
protected $mongo;
public function __construct(LMongo $mongo)
{
$this->mongo = $mongo->connection();
}
//...Other code ...
public function create($input)
{
//Some kind of validation
$this->mongo->collection('pages')->insert($input);
}
//...Other code ...
}
你应该打电话给App::bind('PageRepositoryInterface', 'MongoPageRepository');
某个地方(例如app/start/global.php
)或查看ServiceProviders
.
然后,您可以使用相关控制器中的 Mongo 存储库,如下所示:
<?php
class PageController extends \BaseController {
public function __construct(PageRepositoryInterface $pages)
{
$this->pages = $pages;
}
//...Other code...
public function store()
{
$input = Input::get();
$this->pages->create($input);
//Handle response, etc...
}
}
MongoDB 是一个“无模式”数据库,它允许您根据需要定义其他元数据。
请注意,这不是一个完整的答案,您应该将其用作指南,而不是“复制粘贴”解决方案。我遗漏了重要的事情(例如错误处理、验证和从 中删除不必要的字段$input
)。我建议您查看我提到的资源或通过 IRC 上的#laravel 频道访问。
我怀疑推出自己的元数据解决方案太难了。不过,为了简单起见,这里有一个插件可以为您完成:
https://github.com/kodeine/laravel-meta
我认为它不适用于数组,我认为 Wordpress 元可以吗?我敢肯定,如果您创建自己的系统,则有一种方法。