Laravel: заводская зависимость в модели - PullRequest
0 голосов
/ 29 января 2019

У меня есть модель Log, в которой есть столбец data, в котором хранятся некоторые необработанные данные сообщения, которые могут представлять MessageA или MessageB.

Я делаю это в Laravel, и я думал, что фабричный шаблон для возврата экземпляра одного из этих сообщений из Log будет способом пройти через getMessage().

Ниже упрощенно, но то, что я имею в тестировании, работает.Тем не менее, мне интересно, это хороший способ сделать это?Если нет, что я могу изменить?

class MessageA extends Message { ... }
class MessageB extends Message { ... }
class MessageFactory
{
    public static function ($data)
    {
        // Returns MessageA or MessageB depending on $data
    }
}
class Log
{
    public function __construct()
    {
        return $this->factory = app(MessageFactory::class); // works
    }
    public function getMessage()
    {
        $this->factory->create($this->data);
    }
}

1 Ответ

0 голосов
/ 29 января 2019

Завод должен быть привязан к одной модели.В Laravel они используются для генерации поддельных данных.Вы должны использовать Eloquent для создания новых моделей.

public function getMessage()
{
    if (something) {
        return MessageA::create($this->data);
    }

    return MessageB::create($this->data);
}
...