2017-05-30 12 views
0

で定義されているメソッドを使用しますgetParentFighterToUpdate()の定義は両方のサブクラスにのみ存在しますが、Fightクラスには存在しません。したがって、私は得る:は、私はメソッドを持っている唯一のサブクラス

BadMethodCallException in Builder.php line 2443: 
Call to undefined method 
Illuminate\Database\Query\Builder::getParentFighterToUpdate() 

どうすればいいですか?

EDIT:

DirectEliminationFightクラス::ここでは、両方のgetParentFighterToUpdate方法です

public function getParentFighterToUpdate() 
{ 
    $childrenGroup = $this->group->parent->children; 
    foreach ($childrenGroup as $key => $children) { 
     $childFight = $children->fights->get(0); 
     if ($childFight->id == $this->id) { 
      if ($key % 2 == 0) { 
       return "c1"; 
      } 
      if ($key % 2 == 1) { 
       return "c2"; 
      } 
     } 
    } 
    return null; 
} 

PreliminaryFightクラス

public function getParentFighterToUpdate() 
{ 
    $childrenGroup = $this->group->parent->children; 
    foreach ($childrenGroup as $key => $children) { 
     $childFights = $children->fights; 
     dd($childFights); 
     // Still writing it 
    } 
    return null; 
} 

EDIT 2:

/** 
* Update fighter if it is possible 
* @param $fightsByRound 
*/ 
protected function updateParentFight(Collection $fightsByRound) 
{ 

    foreach ($fightsByRound as $fight) { 
     $parentGroup = $fight->group->parent; 
     if ($parentGroup == null) break; 
     $parentFight = $parentGroup->fights->get(0); 
     $this->chooseAndUpdateParentFight($fight, $parentFight); 
    } 
} 
+0

'getParentFighterToUpdate()'メソッドを両方表示できますか? –

+0

私は自分の質問を編集しました –

+0

'Fight'モデルで' getParentFighterToUpdate 'を定義し、' if(class_basename(static :: class)== 'PreliminaryFight') 'のように、アップ。それはあなたが 'chooseAndUpdateParentFight'にサブクラスの1つを渡していない理由があると言われていますか? –

答えて

0

ますgetParentFighterToUpdateメソッドを定義するインターフェイスを使用して、Fightクラスにそれを実装させることができます。

ではなく、Illuminate\Database\Query\Builderのインスタンスを明らかにあなたのメソッドに渡しているので、実際の問題はどこかにあるようです。正しい変数を渡しているかどうかのメソッド呼び出しを確認してください。

+0

にFight $ fightをキャストする方法はわかりませんが、インターフェースはそれを宣言しますが、定義しません。また、私はそれを実装するためにファイトを望んでいない、ちょうどサブクラス。 2番目の問題は問題ではありませんが、Fightはモデルですが、これを解決できればうまくいくでしょう –

+0

PHPは静的型検査をしていないので、Fightがメソッドを持っていても、それを宣言してはいけません。渡されたパラメータでget_classまたはvar_dumpを試して、それらが正しいかどうか確認できますか?タイプヒントを削除して、それが動作するかどうかを調べることもできます –

+0

すでにタイプヒントを削除しようとしましたが、成功しませんでした。 get_classはFightタイプでなければなりません。タイプヒントで強制するので、あなたは同意しませんか? –

関連する問題