我正在使用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不熟悉,任何建议都将不胜感激
答案 0 :(得分:0)
看看PHP的魔术方法。您可以做的是设置实体,然后设置__get()和__set()方法,设置/获取实体的值。