mercredi 11 décembre 2019

Create Model with HasMany relation using Repository Pattern

I'm trying to implement the repository pattern and save a relationship using the create method as shown below.

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

Within my controller I have injected the repository:

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

My store method looks like:

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);
    }

Subscriber Model

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

Subscribable Model

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

My issue General error: 1364 Field 'subscribable_id' doesn't have a default value is because the subscribable_id is a foreign key and not set in the create method.

How do I relate the subscribable model, setting the subscribable_id? I don't think setting the subscribable_id in the fillable property is the way to go with this.

Many thanks in advance.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire