У меня есть класс ShortMessage, который создает sms-экземпляры для MongoDB через плагин Jenssegers Eloquent. ShortMessage-модель имеет hasOne-реализацию для класса DeliveryReport, который также реализует плагин Jenssegers. Кажется, я не могу:
- добавить отношение ShortMessage-> delivery_report-так, чтобы DeliveryReport был включен в ShortMessage - например, $ sms = App \ ShortMessage :: find (1) - Eloquent запрос каждый раз, когда это выполняется. Я могу получить объект, только вызвав $ sms-> deliveryReport
- , чтобы обновить связь deliveryReport экземпляра $ sms и зависящие от него атрибуты dynamici c (например, delivery_at) при каждом обновлении deliveryReport
Конечно, я мог бы написать класс ресурсов ShortMessage, который бы возвращал правильный json для пользовательского интерфейса, но я ищу способ сделать все это уже на этапе построения запросов Eloquent, чтобы все информация, которая мне нужна, присутствует каждый раз, когда сервер делает Eloquent запрос к экземпляру ShortMessage. Есть ли способ достичь этого?
Вот соответствующие части моего класса ShortMessage:
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class ShortMessage extends Eloquent {
protected $connection = 'mongodb';
protected $visible = [
'delivery_report',
'delivered_at',
'status',
'smsid',
];
protected $append = [
'delivery_report',
'delivered_at',
'status',
];
public function deliveryReport() {
logger(__CLASS__ . '::' . __FUNCTION__ . ' <');
return $this->hasOne('App\DeliveryReport', 'smsid', 'smsid');
}
public function getDeliveredAtAttribute() {
logger(__CLASS__ . '::' . __FUNCTION__ . ' <');
$status = $this->deliveryReport->refresh()->status;
if($status && $status === DeliveryReport::STATUS_DELIVERED) {
logger('status: '.$status);
return $this->delivered_at = $this->deliveryReport->refresh()->statustime;
} else {
logger('Status is not delivered. Status is: '.$status);
return null;
}
}
}
А вот соответствующие части моего класса DeliveryReport:
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class DeliveryReport extends Eloquent {
protected $connection = 'mongodb';
protected $visible = [
'status',
'statustime',
'smsid',
];
public function update(array $attributes = array(), array $options = array()) {
logger(__CLASS__ . '::' . __FUNCTION__ . ' <');
$json = json_encode($attributes);
logger($json);
$this->fill($attributes);
$this->save();
}
}