Как ссылаться на sh Jenssegers Mongodb Eloquent hasOne-отношение при каждом обновлении модели? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть класс ShortMessage, который создает sms-экземпляры для MongoDB через плагин Jenssegers Eloquent. ShortMessage-модель имеет hasOne-реализацию для класса DeliveryReport, который также реализует плагин Jenssegers. Кажется, я не могу:

  1. добавить отношение ShortMessage-> delivery_report-так, чтобы DeliveryReport был включен в ShortMessage - например, $ sms = App \ ShortMessage :: find (1) - Eloquent запрос каждый раз, когда это выполняется. Я могу получить объект, только вызвав $ sms-> deliveryReport
  2. , чтобы обновить связь 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();
  }

}


...