1

我有一个基本的页面模型,它通常会保存相同类型的数据,但是偶尔,我可能需要向记录添加一些额外的信息。

有什么方法可以将自定义字段/元数据添加到记录中,就像 Wordpress 允许的那样?

任何建议表示赞赏。

谢谢

4

2 回答 2

0

一种可能的解决方案是使用像这样的作曲家包:

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 频道访问。

于 2013-08-23T15:27:48.380 回答
0

我怀疑推出自己的元数据解决方案太难了。不过,为了简单起见,这里有一个插件可以为您完成:

https://github.com/kodeine/laravel-meta

我认为它不适用于数组,我认为 Wordpress 元可以吗?我敢肯定,如果您创建自己的系统,则有一种方法。

于 2016-01-29T00:23:15.157 回答