2016-10-11 7 views
0

im используя Laravel 5.3 и ive простой контроллер с методом «store», это сторона отношений «принадлежит». Другие модели содержат правильную функцию hasMany.associate() и 1tomany странное поведение

public function store(Request $request) 
{ 

    $user_id = JWTAuth::parseToken()->authenticate()->id; 
    if(!Vehicle::where('id', '=', $request->vehicle_id)->exists()){ 
     return $this->response->error('could_not_create_trip_errore_veicolo', 500); 
    } 
    if(!Ztl::where('id', '=', $request->ztl_id)->exists()){ 
     return $this->response->error('could_not_create_trip_errore_ztl', 500); 
    } 
    $request->request->add(['user_id' => $user_id]); 

    $trip = new Trip($request->all()); 

    //$trip->user()->associate($request->user_id); 
    //$trip->vehicle()->associate($request->vehicle_id); 
    //$trip->ztl()->associate($request->ztl_id); 

    if(true) 
    { 
     if($trip->save()){ 

      return $this->response->created(); 
     }else return $this->response->error('could_not_create_trip', 500); 
    }else return $this->response->error('could_not_create_trip_current_user_Error', 500); 

} 

Первый вопрос: почему, если комментарий или раскомментируйте «ассоциировать» метод, ничего не меняется. Должен ли я установить их на контроллер или я не знаю, что это значит.

Второе:

Если я посылаю мой контроллер некоторые данные, используя форму для тестирования, что «требуется» является 3 внешних ключей. Если я отправляю номер, который не находится в моей другой таблице «hasmany», ошибка возрастает, но если вы пытаетесь вставить что-то вроде "2dsksk", где 2 - это правильный идентификатор таблицы «many», а затем случайная строка, идентификатор взятый вставкой как 2, это правильно? Подтверждение занимает только «правильное» числовое число данных ... вопрос в том, почему? и это безопасно?

ответ

1

associate просто устанавливает внешний ключ ребенка. Это означает, что вам нужно будет сохранить свою модель впоследствии.

$trip->user()->associate($request->user_id); 
$trip->save(); 

Для второй проблемы, вероятно, MySQL усекает данные на основе типа данных столбца. Если вы не хотите, чтобы это произошло, вам, скорее всего, нужно будет установить MySQL в строгий режим.

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict

+0

спасибо много, так что около 1) нужно ли мне ставить только если записи на ребенке нуждается модель должны быть созданы? – JahStation

+0

около 2) Я могу проверить входные данные, чтобы решить эту проблему? – JahStation

+1

Да, этот метод 'save()' будет запускать запрос, поэтому я бы этого не сделал, если вы на самом деле ничего не делаете. Во втором выпуске вы можете проверить проблему, чтобы решить эту проблему. Я также предлагаю установить MySQL в строгом режиме, по крайней мере, при разработке и обеспечении того, чтобы ограничения внешнего ключа обеспечивали целостность данных, которые вам нужны – user3158900

Смежные вопросы