使用存储库模式创建具有HasMany关系的模型

时间:2019-12-11 10:58:42

标签: php laravel laravel-5 eloquent

我正在尝试实现存储库模式并使用create方法(如下所示)保存关系。

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”没有默认值是因为subscribable_id是外键,并且未在create方法中设置。

如何通过设置 subscribable_id 关联可订阅模型?我不认为在fillable属性中设置 subscribable_id 是解决问题的方法。

非常感谢。

1 个答案:

答案 0 :(得分:0)

Laravel提供了使用相关模型实例保存关系的功能。 因此,您可以通过如下方式对关系调用create方法来保存关系:

UITableviewController

请参见laravel doc on relationship