Eloquent 与 where 子句的关系

Eloquent relationship with a where clause

我需要在中间 table 的 code 字段上执行 where 条件。我的两个模型是;

class Agreement extends Eloquent {

  protected $table = 'agreements';

  public function clients(){ 
    return $this->belongsToMany('Client', 'client_agreements')->withPivot('start_date', 'expire_date', 'code');
  }
}

和;

class Client extends Eloquent {
  public function agreements(){
    return $this->belongsToMany('Agreement', 'client_agreements')->withPivot('start_date', 'expire_date', 'id', 'code');
  }
}

我的控制器目前是;

public function show($code, $client_id)
{
    //
    $client = Client::with('agreements')->find($client_id);

    $client_agreement = $client->agreements;

}

我想我需要扩展 $client->agreements; 代码以在 $code 上包含一个 where 条件。我尝试了很多不同的组合,但一直返回相同的 Call to undefined method 错误。

我尝试过类似的东西;

$client_agreement = $client->agreements->where('code', '=', $code);
$client_agreement = $client->agreements->code->find($code);
$client_agreement = $client->agreements->pivot->code->find($code);

我总是得到同样的错误。我在对象方面不是那么出色,所以也许我看错了。它是怎么做到的?

您需要访问 ->relation() 而不是 ->relation(这是动态 属性 调用):

$client_agreement = $client->agreements()
                     ->wherePivot('code', '=', $code)
                     ->first();