Laravel雄辩的关系混乱

时间:2015-01-07 12:00:55

标签: php arrays laravel eloquent

这是我的情况;

  • 我有一个协议表,列出了不同类型的协议。它基本上是一个查找表。
  • 我有一个client_agreements表,列出了哪些客户已签署了哪种类型的协议。我在这个表中有一个agreement_id(外键id)。

当我使用Laravel时,这是我的Controller方法,用于查看特定客户端的所有协议;

public function index($client_id)
{
    $client_agreements = Agreement::find($client_id);

    return View::make('client_agreements.index')
        ->with('client_agreements', $client_agreements);
}

这是我的Agreement模型;

class Agreement extends Eloquent {

    protected $table = 'agreements';

    public function client_agreements(){

        return $this->hasMany('ClientAgreement', 'agreement_id');
    }

}

所以我想在agreements表格的视图中输出

  • 合约第
  • 水平

client_agreements表格;

  • 起始日期
  • EXPIRE_DATE

我的观看代码(我确定错了,但不知道为什么)基本上是;

@foreach($client_agreements as $client_agreement)
    <tr>
        <td>{{ $client_agreement->agreement_type }}</td>
        <td>{{ $client_agreement->level }}</td>
        <td>{{ $client_agreement->start_date }}</td>
        <td>{{ $client_agreement->expire_date }}</td>
    </tr>
@endforeach

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

$client = Client::with('agreements')->find($client_id);
$client_agreements = $client->agreements;
return View::make('client_agreements.index')
           ->with('client_agreements', $client_agreements);

在你看来:

@foreach($client_agreements as $client_agreement)
    <tr>
        <td>{{ $client_agreement->agreement_type }}</td>
        <td>{{ $client_agreement->level }}</td>
        <td>{{ $client_agreement->pivot->start_date }}</td>
        <td>{{ $client_agreement->pivot->expire_date }}</td>
    </tr>
@endforeach

这需要以下设置:

客户端模型

class Client extends Eloquent {

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

协议模型

class Agreement extends Eloquent {

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

有关更多信息,请阅读Eloquent docs(特别是关于关系的部分)

相关问题