添加自定义字段/元数据以在Laravel 4中记录

时间:2013-08-23 14:28:10

标签: php laravel laravel-4

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

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

任何建议表示赞赏。

由于

2 个答案:

答案 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有用吗?如果您创建自己的系统,我确信有一种方法。