如果我有属性
表,和2个其他表:
*property_characteristics
- property_id (i.e. 1)
- characteristic_id (i.e. 5 - join with default_characteristics)
- value (i.e. 3 - aka 3 rooms)
*default_characteristics
- id (i.e. 5)
- name (i.e. rooms)
在财产中。我拥有的php模型:
public function characteristics()
{
return $this->belongsToMany('Proactiv\DefaultCharacteristic', 'property_characteristics', 'property_id', 'characteristic_id');
}
如何从以下内容开始获取某个属性的房间数(属性_特征值):
$property = Properties::find(1);
我需要这样的东西:
$property->characteristics->rooms // should return 3 which is the value columns on property_characteristics table
由于值在数据透视表上,您需要告诉Laravel这个额外的字段。添加到您的的属性到许多
行,使:
return $this->belongsToMany('Proactiv\DefaultCharacteristic', 'property_characteristics', 'property_id', 'characteristic_id')
->withPivot('value');
然后选择具有所需名称的特征,房间
,并获取值:
echo $property->characteristics()->with('name', 'rooms')->first()->pivot->value;
或者,添加一个getter到您的属性
模型中,它会为您做这件事(您仍然需要将with Pivot
部分添加到关系中):
public function getRoomsAttribute()
{
return $this->characteristics()
->where('name', 'rooms')
->first()
->pivot
->value;
}
然后,您可以以类似于您最初想要的方式获得房间数量,使用$属性-
或者,您可以将其推广以获得任何特征:
public function getCharacteristic($name)
{
return $this->characteristics()
->where('name', $name)
->first()
->pivot
->value;
}
然后获取具有$property的房间数-
首先,你必须告诉你的关系,让你的附加字段可用。您可以使用withPivot()
方法执行此操作:
public function characteristics() {
return $this->belongsToMany('Proactiv\DefaultCharacteristic', 'property_characteristics', 'property_id', 'characteristic_id')
->withPivot('value');
}
现在,您可以访问数据透视表上的值。你这样做:
$property = Properties::find(1);
foreach ($property->characteristics as $characteristic) {
echo $characteristic->pivot->value;
}
您可以在这里的文档中,在“检索中间表列”标题下阅读更多关于此的信息。