我有一个基本的页面模型,它通常会保存相同类型的数据,但偶尔我可能需要在记录中添加一些额外的信息。
有没有办法将自定义字段/元数据添加到记录中,就像Wordpress允许的那样?
任何建议表示赞赏。
由于
答案 0 :(得分:0)
一种可能的解决方案是使用像这样的作曲家包:
https://packagist.org/packages/navruzm/lmongo
在Github页面here上很好地解释了这个包。
这将允许您的Eloquent模型使用MongoDB驱动程序。此外,如果您使用Repository
接口/类开发(关注分离技术很好地涵盖了here& here),那么前面提到的包将允许您将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是一个“无模式”数据库,允许您根据需要定义其他元数据。
请请注意,这不是一个完整的答案,您应该将其作为指南,而不是“Copy'n'Paste”解决方案。我遗漏了重要的事情(例如错误处理,验证和从$input
剥离不必要的字段)。我建议你看一下我提到的资源或者在IRC上的#laravel频道。
答案 1 :(得分:0)
我怀疑推出自己的元数据解决方案太难了。为简单起见,这里有一个插件可以帮到你:
https://github.com/kodeine/laravel-meta
我不认为它适用于数组,我认为Wordpress meta有用吗?如果您创建自己的系统,我确信有一种方法。