2017-12-17 3 views
0

私はこれを実行Partnerと呼ばれるクラスのメソッドを持っています。Laravel方法エラー:リレーションシップメソッドは、タイプを照らしデータベースのオブジェクトを返す必要があります雄弁リレーションズ関係

$commissionAmount = $subscriptionRevenue * $this->connectStatus()->first()->margin; 

PartnerconnectStatus(asloクラス)メソッドは次のとおり

public function connectStatus($date = false) 
{ 
    $lastSnapshot = $this->lastSnapshot($date); 

    if ($lastSnapshot) { 
     $subscribed = $lastSnapshot->cum_subscribed; 
    } else { 
     $subscribed = 0; 
    } 

    return $this->contract() 
     ->whereRaw("{$subscribed} BETWEEN connections_from AND connections_to"); 
} 

Partnerクラスのcontract方法は、()

0123でありますエラーで

return $this->contract() 
    ->whereRaw("{$subscribed} BETWEEN connections_from AND connections_to"); 

私のコードはでconnectStatus方法で失敗している

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation 

すべてのヘルプは高く評価されています。

答えて

0

我々は間違いなくRelationオブジェクトを返さないconnectStatus()方法を知っています。

これはどう:

// Changed the method name 
public function getConnectStatusAttribute() 
{ 
    // ... your code 
} 

そして、それを呼び出すために:

$commissionAmount = $subscriptionRevenue * $this->connect_status->first()->margin;

+0

こんにちは@spacemudd、ありがとうございました。どのように '$ date'を呼び出し中の属性ゲッターに渡すのですか? – TheRealPapa

+0

@TheRealPapa私は完全にその1つに間隔を置いています。うん、ゲッターで$日付を渡すことはできません。私はあなたのような何かに取り組んだが、私はそれがどのように行われたかを見てみよう。ごめんなさい! – Spacemudd

+0

こんにちは@Spacemudd、私はそれを得た!私は私の質問で 'BETWEEN'作品でした! – TheRealPapa

1

私の問題は、integer比較のためBETWEENを使用していました。これで解決しました。

public function connectStatus($date = false) 
{ 
    $lastSnapshot = $this->lastSnapshot($date); 

    if ($lastSnapshot) { 
     $subscribed = $lastSnapshot->cum_subscribed; 
    } else { 
     $subscribed = 0; 
    } 

    return $this->contract() 
     ->where('connections_from', '<=', $subscribed) 
     ->where('connections_to', '>=' , $subscribed) 
     ->first(); 
} 
関連する問題