Laravel 4模型关系

时间:2015-01-19 20:26:54

标签: php laravel-4

我有2张桌子: 建筑物:

  • ID
  • 名称
  • 地址

公寓:

  • ID
  • building_id
  • unit_number
  • other_data

我也有2个型号:

建筑模型

class Building extends Eloquent{


protected $table = 'buildings';


public function apartments()
{
    return $this->hasMany('Apartment');
}
}

公寓模型

class Apartment extends Eloquent{


protected $table = 'apartments';


public function building()
{
    return $this->belongsTo('Building');
}

}

所以现在在我的控制器中,我正在尝试检索所有公寓,我希望它与建筑模型一起加入,以便我可以检索每个公寓所在建筑物的名称。 / p>

Array('0' => 
array('id' => 1,
'building_id' => 1,
'unit_number'=>234,
'other_data'=>'other_stuff',
'name'=>'Building1'),
'1' => 
array('id' => 2,
'building_id' => 2,
'unit_number'=>567,
'other_data'=>'more_stuff',
'name'=>'Building4'))

我相信我可以这样做,让他们独立,但我如何将它们合并在一起?

$buildings = Building::all();
$apartments= Apartment::all();

这是我在控制器中尝试的内容

$building = new Building();
$buildings = $building->all();
$apts = $building->find(1)->apartments();
dd($apts);

我还在控制器中尝试了许多其他变体而没有成功。我是否正在以正确的方式检索数据?

1 个答案:

答案 0 :(得分:0)

不是单独查询模型,而是只查询一个和急切加载关系,这样它们也都包含这些数据:

$apartments = Apartment::with('building')->get();
foreach($apartments as $apartment){
    echo 'Building name: '.$apartment->building->name;
}

获取特定建筑的公寓:

$apartments = Building::find(1)->apartments;

(请注意,我没有调用函数apartments(),而是访问属性apartments。然后,Eloquent将为您获取关系的结果。