Создать модель с отношением HasMany, используя Шаблон репозитория - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь реализовать шаблон репозитория и сохранить связь, используя метод создания, как показано ниже.

abstract class EloquentRepository implements Repository {
    public function create($data)
    {
        return $this->model->create($data);
    }
}

В моем контроллере я ввел репозиторий:

public function __construct(SubscriberRepository $subscriberRepository,
                                SubscribableRepository $subscribableRepository)
    {
        $this->subscriberRepository = $subscriberRepository;
        $this->subscribableRepository = $subscribableRepository;
    }

Мой метод магазина выглядит следующим образом:

public function store(CreateSubscriberRequest $request): JsonResponse
    {
        $subscribable = $this->subscribableRepository->findByIdentifier($request->input('type'))
            ->firstOrFail();

                $attributes = [
            'name' => $request->input('name'),
            'email' => $request->input('email')
        ];

        $subscriber = $this->subscriberRepository->create($attributes);
    }

Модель подписчика

public function subscribable()
    {
        return $this->belongsTo(Subscribable::class, 'subscribable_id');
    }

Модель с подпиской

public function subscribers()
    {
        return $this->hasMany(Subscriber::class);
    }

Моя проблема Общая ошибка: 1364 Поле 'subscribable_id' не имеет значения по умолчанию потому что subsable_id является внешним ключом и не задано в методе создания.

Как мне соотнести модель с подпиской, установив subscribable_id ? Я не думаю, что установка subscribable_id в свойстве fillable является подходящим способом для этого.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 11 декабря 2019

Laravel предоставляет функциональность для сохранения отношений, используя связанные экземпляры модели. Таким образом, вы можете сохранить отношение, вызвав метод create для отношения следующим образом:

public function store(CreateSubscriberRequest $request): JsonResponse
{
    $subscribable = $this->subscribableRepository->findByIdentifier($request->input('type'))
        ->firstOrFail();

    $attributes = [
        'name' => $request->input('name'),
        'email' => $request->input('email')
    ];

    $subscribable->subscribers()->create($attributes);
}

См. документ по laravel для отношений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...