Php 拉雷维尔雄辩的关系混乱

Php 拉雷维尔雄辩的关系混乱,php,arrays,laravel,eloquent,Php,Arrays,Laravel,Eloquent,这是我的情况 我有一个协议表,其中列出了不同类型的协议。它基本上是一个查找表 我有一个client_agreements表,其中列出了哪些客户签署了哪种类型的协议。我在此表中有一个协议\u id(外键id) 当我使用Laravel时,这里是我的控制器方法,用于查看特定客户的所有协议 public function index($client_id) { $client_agreements = Agreement::find($client_id); return View

这是我的情况

  • 我有一个协议表,其中列出了不同类型的协议。它基本上是一个查找表
  • 我有一个client_agreements表,其中列出了哪些客户签署了哪种类型的协议。我在此表中有一个
    协议\u id
    (外键id)
当我使用Laravel时,这里是我的控制器方法,用于查看特定客户的所有协议

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

    return View::make('client_agreements.index')
        ->with('client_agreements', $client_agreements);
}
这是我的
协议
模型

class Agreement extends Eloquent {

    protected $table = 'agreements';

    public function client_agreements(){

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

}
因此,我想在视图中从
协议
表中输出

  • 协议类型
  • 水平仪
客户协议
表中

  • 开始日期
  • 到期日
我的视图代码(我肯定是错的,但不知道为什么)本质上是

@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
@foreach($client\u协议作为$client\u协议)
{{$client\ u agreement->agreement\ u type}
{{$client_agreement->level}
{{$client_agreement->start_date}
{{$client_agreement->expire_date}
@endforeach

我做错了什么?

你可以这样做:

$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
协议模型
要了解更多信息,请阅读(特别是关于关系的部分)

我实际上已经有了一个客户模型,或者你刚刚发现我可能会有。您的解决方案有效,谢谢!你能解释一下为什么我必须在这里涉及客户机模型/类吗?我不能完全想象它。。即使在阅读了这些文档之后,你也必须涉及到客户模型。您可以尝试使用
$Client\u id
获取与客户端有关系的所有协议,但这会使访问数据透视变得更加复杂。在这种情况下,我总是从我的id所在的实体开始。。。你知道我的意思吗?我从来没有想过在这一点上包括客户机模型,所以看起来我有更多的阅读要做。您知道如何显示
客户协议.id
值吗?如果我在视图中执行
$client\u agreement->id
,则仅显示
agreements.id
值。尝试
$client\u agreement->pivot->id
如果不起作用,则需要将
id
添加到关系中的
with pivot
调用中。我知道,
pivot
对象中会自动提供两个外键(
client\u id
agreement\u id
),但我不确定id本身……我必须将
id
添加到关系中,但它确实起了作用。。谢谢
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');
    }
}