Laravel 4.2를 사용하여 일종의 데이터 로거를 개발하고 싶습니다. 온도 데이터 만있는 온도 센서 ("TemperatureSensor1")와 에너지 및 전력 데이터 (함께있는 두 개의 데이터 열)가있는 에너지 모니터 ("EnergyMonitor1")와 같이 다양한 데이터 형식을 가진 다양한 종류의 센서가 시스템에 있습니다.).Laravel - 다른 모델/데이터 유형으로 데이터 로거 구현
외부 응용 프로그램 (서버에서 실행)은 이러한 데이터를 수집하고 HTTP POST 및/sensors/TemperSensor1/data와 같은 경로를 사용하여 Laravel 응용 프로그램에 게시합니다. 이 HTTP POST의 본문은 JSON 요청으로 구성됩니다. 온도 센서의 경우이 온도는 { "온도": 12.3}이거나 에너지 모니터의 경우 { "energy": 10000.3, "power": 123.3}입니다. Laravel 애플리케이션은 모든 센서의 모든 데이터 집합을 MySQL 데이터베이스에 저장해야합니다. 데이터 포인트를 저장하기 위해 센서 당 하나의 테이블을 가지고 있다고 생각했습니다.
Table "TemperatureSensor1":
id | timestamp | temperature
1 | 123 | 12.3
...
Table "EnergyMonitor1":
id | timestamp | energy | power
1 | 128 | 10000.3 | 123.3
...
다음과 같습니다 "센서"라는 테이블도있다 :이 예에서는
는id | sensor_name | alias | data_type
1 | TemperatureSensor1 | Living room | 0
2 | EnergyMonitor1 | House | 1
그래서 논리적 경로는 다음과 같아야합니다
- 센서 데이터는 외부에 의해 수집 앱.
- Laravel의 HTTP POST 앱/센서/센서 고유의 JSON 데이터가 포함 된 데이터.
- Laravel 앱은 '센서'표가있는 경우 표를 찾습니다. JSON 데이터는 "data_type"필드에 따라 예를 들어 구체적인 모델로 전달됩니다. data_type = 0 -> TemperatureSensorModel 또는 data_type = 1 -> EnergyMonitorModel. 참고 : 시스템에 많은 온도 센서가있을 수 있습니다. 이들 모두는 저장된 데이터가있는 다른 이름과 테이블을 가지고 있지만 "TemperatureSensorModel"이 공통입니다.
- 콘크리트 모델은 데이터를 "디코딩"하여 센서 별 테이블에 저장합니다.
3 단계는 현재 나에게 다소 불투명합니다. Laravel에서 어떻게 할 수 있습니까? 이러한 종류의 다형성 관계 (data_type에 따라 다른 동작)와 같은 냄새가 있지만 예제가 적합하지 않다고 생각합니다.
이런 종류의 응용 프로그램을 구현하는 또 다른/더 좋은 전략이 있습니까?
편집
내가 데이터로 수행 할 작업을 더 명확하게하려면, 뷰가해야/센서/{Sensorname}/데이터 /보기를 호출 (또는 같은 것을)으로
수집 된 데이터의 플롯을 포함해야하는 렌더링됩니다. 온도 도표가 에너지 도표와 다르기 때문에 모든 센서 유형에 대해 다른보기가 존재합니다.
뷰에는 데이터베이스에서 플롯 데이터를 가져와야하는 JS 플로팅 구성 요소에 대한 참조가 포함됩니다. 이 작업은 JSON 형식의 테이블 "Sensorname"(예 : "TemperatureSensor1")의 기록 된 데이터를 생성하는/sensors/{Sensorname}/data의 AJAX 요청으로 수행 할 수 있습니다.
나는 약간의 실험이 내가 함께 제공된 것입니다 :Route::resource('sensors', 'SensorController');
Route::resource('sensors.data', 'SensorDataController');
...
class SensorDataController extends BaseController {
public function store($id) {
$sensor = Sensor::where('sensor_id', $id)->first();
$sensor_model = SensorModelFactory::fromSensor($sensor);
// do something with $sensor_model
}
}
class SensorModelFactory
{
public static function fromSensor($sensor)
{
$sensor_model = null;
if ($sensor)
{
switch ($sensor->data_type)
{
case TemperatureSensor::DATA_TYPE:
$sensor_model = new \TemperatureSensor;
}
if ($sensor_model)
$sensor_model->setTable($sensor->sensor_id);
}
return $sensor_model;
}
}
이 지금은 일을 할 것 같다 :이 같은 자원 컨트롤러와 중첩 된 자원 제어기를 가지고
. 데이터베이스 테이블 "센서"에 저장된 data_type을 기반으로 SensorModelFactory에서 콘크리트 $sensor_model
을 수신합니다.
다형성 관계가 정확히 필요한 것입니다. 이것은 본질적으로 공통된 데이터로 다양한 센서 유형을 가질 수있는 감사 테이블입니다. –