2014-11-01 4 views
0
bookmaker table 
id 
name 


bookmaker_user table 
id 
account_name 
bookmaker_id 
user_id 


user table 
id 
name 

User Model : 
public function bookmakers(){ 
    return $this->belongsToMany('Bookmaker', 'bookmaker_user', 'user_id', 'bookmaker_id') 
      ->withPivot('id', 'accountname')->withTimestamps(); 
} 


BookmakerController.php 
public function update($id) 
{ 
      $bookname = Input::get('booknamemodifselect'); 
      $accountname = Input::get('accountnamemodifinput'); 
      $bankrollinvested = Input::get('bankrollinvestedmodifinput'); 
      $bonus = Input::get('bonusmodifinput'); 
      $bankrollamount = Input::get('bankrollamountmodifinput'); 

      $bookmodif = DB::table('bookmakers')->where('name', $bookname)->first(); 


      $bookmaker = $this->user->bookmakers()->where('bookmaker_user.id','=',$id)->first(); 
      $bookmaker->pivot->bookmaker_id = $bookmodif->id; 
      $bookmaker->pivot->save(); 
    } 

$ идентификатор идентификатор счетаОбновление сводной таблицы по идентификатору в Laravel

$ this-> пользователь является пользователем authentified.

Я хочу обновить букмекер для учетной записи по его идентификатору (по идентификатору учетной записи, который я имею в виду), который принадлежит пользователю auth. Поскольку у пользователя auth есть несколько записей с тем же букмекером, но с другим именем учетной записи. В нем говорится: «Попытка получить свойство не-объекта».

+0

На какой линии именно вы получите «Пытаюсь получить свойство не-объект» ошибка? – lukasgeiter

+0

$ bookmaker-> pivot-> bookmaker_id = $ bookmodif-> id; – edofthadead

+0

Не могли бы вы проверить, действительно ли он нашел букмекера? Я полагаю, что '$ bookmodif' равно null? – lukasgeiter

ответ

3

Подводя итоги под вопросом, это не очень общий дизайн базы данных. И это также означает, что было бы неплохо изменить это. Преобразование сводной таблицы bookmaker_user в таблицу с расширенным ростом с собственным классом модели. Причины для этого являются:

  • несколько записей, которые принадлежат одному и тому же пользователю и букмекерской (многие-ко-многим должны иметь только один)
  • Дополнительные данные, хранящиеся в сводной таблице (в то время как обычно в порядке, он добавляет к первая точка)
  • Легче обработки изменений (например, изменение букмекера учетной записи)

Но это на самом деле не проблема, вопрос ставит так вот что:

Я попробовал его локально, и у меня не было никаких ошибок, но я бы не сохранил его в базе данных.
Кажется, что это какая-то ошибка или неожиданное поведение. Однако обходной путь использует Query Builder.
На мой взгляд, его еще более элегантным для этого случая ...

$bookmodif = DB::table('bookmakers')->where('name', $bookname)->first(); 

if($bookmodif !== null){ // just to make sure the bookmaker exists 
    DB::table('bookmaker_user') 
     ->where('id', $id) 
     ->update(array('bookmaker_id' => $bookmodif->id); 
} 
+0

он работает спасибо за ваш ответ! я не могу проголосовать, у меня нет репутации 15, может кто-то голосует, пожалуйста! – edofthadead

+0

Вы можете принять ответ, нажав галочку под подсчет голосов :) – lukasgeiter

+0

hahah ok thx !!! – edofthadead

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