从Laravel中的数据透视表获取特定数据部分

时间:2014-09-01 10:00:55

标签: php laravel orm eloquent

我正在建立一个网站,公司的事件 得分。 事件按城市排序。

因此,通过示例,某人可以完成4个事件,因此他们可以获得每个事件的分数。

我使用数据透视表来保存分数。 (这里是截图)

enter image description here

现在我使用以下查询加载特定事件的所有人。

$data['companies'] = Event::find($id)->city->companies;

我在我的刀片文件中使用以下结构显示它们

@foreach($companies as $company)
   {{ $company->name }}
        @foreach($company->persons as $person)
           {{ $person->firstname }}
           {{ $person->eventscore }}
        @endforeach
    @endforeach

person-> eventscore是数据透视表的链接。并且它正在工作,但它为我提供了所有事件的那些人的分数。

我只想查看我们现在正在观看的事件的分数(你可以在网址栏中看到id,我用红色箭头标记了id,现在我怎么样?在我的视图中只询问显示特定事件的分数?

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

您的查询需要稍加更改。请参阅下面的示例。

class Person extends Eloquent {
    public function events()
    {
        return $this->belongsToMany('Event', 'person_event', 'event_id', 'person_id')->withPivot('id','score');
    }
}

class Event extends Eloquent {
    public function persons()
    {
        return $this->belongsToMany('Person', 'person_event', 'person_id', 'event_id')->withPivot('id','score');
    }
}

现在要为特定事件加载所有人,查询是..

$event_id = 1;
$persons = Person::with('events')->whereHas('events', function($q) use ($event_id){$q->where('event_id',$event_id);})->get();

在视图中......

@foreach($persons->events as $event)
    {{ $event->pivot->score}}
@endforeach

答案 1 :(得分:0)

您需要在模型中或在您的关系中更具体地指定您想要的枢轴字段。

这是一个你可以做的例子

function events(){

return $this->belongsToMany('Events', 'person_events', 'person_id', 'event_id')->withPivot('score');

}

现在您可以按如下方式访问此分数呼叫枢轴。

@foreach($persons->events as $event)

    {{ $event->pivot->score}}

@endforeach

上述foreach循环只是迭代所有人物事件并从数据透视表中获取该特定事件的分数。