$data = $request->only('rating', 'rateable_id', 'user_id', 'rateable_type');
// создаст или обновит запись в модели Rating в зависимости от того
// было ли найдено в модели Rating поле user_id' равное $request->user_id'
Rating::updateOrCreate(['user_id' => $request->user_id, 'rateable_id' => $request->rateable_id], $data);
Вот ошибка
SQLSTATE[HY000]: General error: 1364 Field 'rateable_id' doesn't have a default value (SQL: insert into `ratings` (`rating`, `updated_at`, `created_at`) values (4, 2017-11-22 09:54:53, 2017-11-22 09:54:53))
Насколько я понял запрос на запись не содержит всех полей, в частности 'rateable_id' . Почему, ведь я написал
Rating::updateOrCreate(['user_id' => $request->user_id, 'rateable_id' => $request->rateable_id], $data);