Сначала в защищенном поле $ fillable вы подчеркнули поле nation , относящееся к БД.В соответствии с этим я не понимаю поле nation_id во втором запросе попытки.
В декларации о связи, пожалуйста, подчеркните внешний ключ, чтобы разница между этими двумя полями (нация иnation_id) становится понятным.
Предполагая, что поле nation содержит отношение к записи Наций (соответствие по первичному уникальному идентификатору), вы можете сравнить предоставленные данные по этому идентификатору (длясравнение нации) и не во всех полях нации.
Тогда первый сообщенный вами случай, который я предположил, неверен
Первый случай: "Nation_id не имеет значения по умолчанию"
, потому что это означает, что вы вставляете спортсмена без указания идентификатора страны, и это означает, что этот идентификатор не проверяется в построителе запросов (возможно, потому что он равен нулю).Таким образом, вы не показываете сравнение с текущим атлетом и существующим атлетом БД, если нация равна нулю.
В общем, я предлагаю вам выполнить следующие шаги для выполнения вашей задачи:
- Проверьте правильность всех данных, передаваемых в построитель запросов
. Напишите запрос следующим образом:
$ath = Athlete::firstOrCreate(['field_that_contains_nation_id'=>$nation->id, 'other_athlete_fields' => $value, ...] );
, затем выполните операцию для этой модели
$ath->save();
, еслиВы хотите знать, если запись создана, сделайте это:
if($ath->wasRecentlyCreated){
echo 'Created successfully';
} else {
echo 'Already exist';
}
Если это уже не работает, пожалуйста, убедитесь, что отношения установлены правильно в таблицах.