用雄辩的方式获取外键的名称

时间:2013-06-05 10:06:07

标签: laravel laravel-4 eloquent

这一定是非常基本的东西,但我似乎无法找到如何做到这一点。

我与桌子之间有一对多的关系:单位和陆军(一支军队包含许多单位),这些是我的模型:

class Army extends Eloquent {
    protected $guarded = array();

    public static $armies = array();

    protected $table = 'armies';

    public function units()
    {
        return $this->hasMany('Unit');
    }

}

class Unit extends Eloquent {
    protected $guarded = array();

    public static $units = array();

    protected $table = 'units';

    public function armies()
    {
        return $this->belongsTo('Army', 'army');
    }


}

所以,在我的单位表中,我有一行名为“军队”的行,其中包含与该单位相关的军队的ID,我想在我的视图中以下列方式显示一个简单的ul列表(我希望这个显示在单位索引视图上):

 <ul>
      <li>Army 1 name
           <li>Unit 1 of Army 1</li>
           <li>Unit 2 of Army 1</li>
      </li>
      <li>Army 2 name
           <li>Unit 1 of Army 2</li>
           <li>Unit 2 of Army 2</li>
      </li>
 </ul>

要做到这一点,我有我的单位控制器:

class UnitsController extends BaseController {

protected $layout = 'master';

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index()
{
    $units = Unit::all();

    $this->layout->content = View::make('units.index', compact('units'));


}
/*Other stuff*/
}

在我看来(视图/单位内的index.blade.php):

<ul class="units">
    @foreach($units as $unit)
        {{$unit->army}}
            <li>        
        {{ HTML::link(route('units.show', ['units' => $unit->id]), $unit->name)}}
    </li>
@endforeach
</ul>

但是{{$ unit-&gt; army}}只是(当然)显示了军队的身份,我想要这个名字,我该怎么做?

1 个答案:

答案 0 :(得分:3)

假设您已正确设置架构:军队表至少包含 id (自动增量)和单位表至少 id (自动增量)和 army_id (整数,无符号),然后试试这个:

<强>模型

class Army extends Eloquent {
   public function units()
   {
     return $this->hasMany('Unit');
   }
}


class Unit extends Eloquent {
  public function armies()
  {
    return $this->belongsTo('Army');
  }
}

在您的控制器中 您希望获取所有军队的单位

$armies = Army::with('units')->get();

在您的视图中,您希望遍历结果集,输出每个军队的名称及其各自的单位

@foreach($armies as $army)
    {{$army->name}}
       <ul>
          @foreach($army->units as $aunit)
            <li>        
               {{ $aunit->name }}
            </li>
          @endforeach
       </ul>
@endforeach

如果这不起作用,我会吃掉我的头。