Есть определенные вещи, в которых вы должны убедиться.
Первое: в вашей SiteFeature
-модели обратная связь с Site
-моделями, кажется, отсутствует.
Должна быть такая функция:
public function site()
{
return $this->belongsTo('App\Site');
}
См. Laravel 5.6 - Красноречивые отношения, один-ко-многим .
Если, однако, у вас есть отношения, в которых (n) сайты могут быть связаны с (n) SiteFeatures, ваши отношения и обратные отношения должны отличаться.
(И там также должна быть сводная таблица, в которой вы можете хранить отношение n-to-n)
См. Laravel 5.6 - Красноречивые отношения, в этом случае многие-ко-многим .
Поскольку в вашем Вопросе не описывается, что получено с помощью $ request, вам следует учесть следующее:
- Подтвердите свои данные. Это гарантирует, что вы не сохраните мусор в своей базе данных
- Убедитесь, что у вас уже есть какая-то часть набора данных, которую вы хотите сохранить, затем сохраните в два этапа:
Первый шаг:
$site = Site::firstOrCreate(['path' => $request['input_name_for_path'],
'site_link' => $request['input_name_for_site_link'],
]);
Это даст вам правильную Site
-Модель, сохраненную в базе данных.
(Обратите внимание, что это показывает, как вы вручную назначаете значения для полей, которые можно заполнить, определенных в модели, если у вас есть разные имена входных полей)
Теперь вы можете перейти на сохранение SiteFeature
-Модели, подключенной к нему:
$feature = SiteFeature::firstOrCreate('feature' => $request['input_name_for_feature');
$site->features()->attach($feature->id);
Это должно сделать хитрость, сохраняя как новую (или старую) Site
, так и связанную SiteFeature
в вашей базе данных.
Если я неправильно понял вопрос, не стесняйтесь добавлять информацию, и я буду обновлять.