Laravel方法错误:关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation的对象

时间:2017-12-17 03:22:43

标签: php laravel-5

我在名为Partner的类中有一个执行此操作的方法:

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

connectStatus(同样在Partner类)方法是:

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");
}

contract方法(也在Partner类中)

public function contract()
{
    return $this->hasMany(PartnerConnectContract::class, 'partner_id');
}

我的代码在connectStatus方法失败:

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

有错误:

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

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我的问题是使用BETWEEN进行integer比较。这解决了它。

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();
}

答案 1 :(得分:0)

我们知道方法connectStatus()肯定不会返回Relation个对象。

这个怎么样:

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

并称之为:

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