2015-12-27 4 views
1

Здесь в этой документации Laravel Inserting Related Model нет способа обновить текущую связанную модель. Посмотрите: Relation Between two ModelsКак обновить похожие модели в Laravel

private function UserToken($token,$expire,$user_id){ 

    if($JetUserPass=JetUserPass::find($user_id)->token){ 
     $JetT = new JetTokens(['id_token' =>$token,'expires_on'=>$expire]); 
     $JetUserPass2=JetUserPass::find($user_id); 
     $JetUserPass2->token()->save($JetT);//NOT WORKING 

    }else{ 
     $JetT = new JetTokens(['id_token' =>$token,'expires_on'=>$expire]); 
     $JetUserPass=JetUserPass::find($user_id); 
     $JetUserPass->token()->save($JetT); 
    } 
} 

Possible Error: Integrity Violation ...

Здесь, если блок Он проверяет, что маркер есть для пользователя, если это правда, то это будет обновлять существующий, иначе он будет создавать новый. Я хочу обновить модель JetTokens от JetUserPass Model i.e Как обновить Связанную модель?

+0

@mrun Это не сработает, правильно прочитайте документы. –

+0

Похоже, вы ищете метод 'updateOrCreate() 'Eloquent'. Кроме того, попробуйте следовать правилам для именования: методы должны быть на камне ('userToken' не' UserToken'), и это хорошая идея, чтобы вернуть связанную модель для облегчения цепочки методов или просто использовать обновленную/вновь созданный экземпляр JetUserPass далее в приложении. –

+0

@MartinBean здесь Я попытался решить проблему с помощью множества различных методов, отлично работает, но мой запрос заключается в том, как обновить модель с помощью соответствующей модели, например: «token принадлежит пользователю». Мы можем сохранить токен с помощью пользовательской модели, вызвав функцию '$ jetUserPass-> token()' token в пользовательской модели: 'public function token() { return $ this-> hasOne ('App \ JetTokens', 'jetuserinfo_id'); } ' этой функции save() работает нормально, но я хочу обновить существующую запись. :) – Puneet

ответ

0

Поскольку вы не представили сообщение об ошибке, я не смогу вам помочь. Но есть другой метод, называемый create на той же странице документации. Он говорит:

In addition to the save and saveMany methods, you may also use the create method, which accepts an array of attributes, creates a model, and inserts it into the database. Again, the difference between save and create is that save accepts a full Eloquent model instance while create accepts a plain PHP array:

Таким образом, чтобы ответить на ваше решение, вы можете сделать так:

private function UserToken($token, $expire, $user_id) 
{ 
    $jetUserPass = JetUserPass::find($user_id); 

    $insertValues = [ 
     'id_token' => $token, 
     'expires_on' => $expire 
    ]; 

    // Since you have same code, I have replaced it 
    // in a single line following the principle of DRY. 
    // Read the link below. 
    $jetUserPass->token()->create($insertValues); 
} 

Просто примечание стороны:

Ваш код нарушает принципы DRY. Это связано с тем, что ваш блок if и else вашего метода имеет тот же код, за исключением объектов и JetUserPass2. Этого следует избегать при любых обстоятельствах.

Надеюсь, это поможет вам. Счастливое кодирование. Приветствия.

+0

В коде нет повторения, извините, но у вас там не было логики, что происходит, я вам расскажу - вот в if block. Проверяет, что токен присутствует там для пользователя, если true чем он обновит существующий, иначе он создаст новый. Я знаю, как сохранять новые, но не знаю, как обновить связанную модель – Puneet