Laravel雄辩地使用mongo从父级构建子对象

时间:2015-09-18 03:02:58

标签: php mongodb laravel

我正在使用laravel 5.1和jenssegers mongodb,我遇到了一些有这种结构的问题

    class ServiceProvider extends Eloquent {
        protected $collection = 'service_provider';
        protected $connection = 'mongodb';

        public static function factory($serviceId) {
           switch ($serviceId) {
            case self::SERVICE_PROVIDER_CHILD_CARE : {
                return new ChildCareServiceProvider();
            }
            break;
           }
        }
        public static get_by_service_id($service_id) {
          return self::find($serviceId)->first();
        }
    }
    class ChildCareServiceProvider extends ServiceProvider implements IServiceProvider
    {
        protected $collection = 'service_provider';
        protected $connection = 'mongodb';

        public function availabilityTimes()
        {
            return $this->hasMany('App\Models\ServiceProvider\ServiceProviderAvailabilityTime');
        }
    } 

当我保存或更新服务提供商时,我知道它是什么类型的服务,所以我可以使用工厂方法来获取子项并保存它。但是当我通过id获得服务时 - 我还不知道服务类型,我只知道它的id。所以我在ServiceProvider中有一个方法,可以查询mongo集合并通过id获取记录。在这种情况下,该记录将是对象ServiceProvider的实例。有没有一种从ServiceProvider对象数据创建ChildCareServiceProvider对象的简单方法?我试过像

这样的东西
$data = ServiceProvider::find($serviceId)->first()->attributesToArray();
$serviceProvider = new ChildCareServiceProvider($data);

但在这种情况下,$ serviceProvider对象的内部结构在内部属性方面略有不同,这会以某种方式影响我的availabilityTimes关系

我对laravel和mongo不熟悉,任何建议都将不胜感激

1 个答案:

答案 0 :(得分:0)

看看PHP的魔术方法。您可以做的是设置实体,然后设置__get()和__set()方法,设置/获取实体的值。