提问者:小点点

从belongsToMany关系Laravel获取指定记录


如果我有属性表,和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

共2个答案

匿名用户

由于值在数据透视表上,您需要告诉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;
}

您可以在这里的文档中,在“检索中间表列”标题下阅读更多关于此的信息。