使用laravel eloquent从两个连接表中获取数据

时间:2013-05-22 05:56:25

标签: orm module laravel laravel-4 eloquent

我有两个表,模块(id,module_name)和sub_modules (id,module_id,sub_module_name)。 我想显示一个像这样结构的表:

Sub Module ID | Module Name | Sub Module Name

Modules.php(Model)

class Modules extends Eloquent {

 protected $table = 'modules';

 public function submodules()
 {
    return $this->hasMany('SubModules','module_id');
 }
}

SubModules.php(模型)

class SubModules extends Eloquent {

  protected $table = 'sub_modules';

  public function modules() {
    return $this->belongsTo('Modules');
  }

  public function nodes()
  {
    return $this->hasMany('Nodes','sub_module_id');
  }
}

AdminController.php(Controller)

  public function subModules() {
     return View::make('sub-modules',
                        array('title'=>'Sub-Modules',
                       'modules'=>Modules::all(),
                       'sub'=>Modules::with(array('submodules'))->get()                 
                      )
     );
  }

在我的子模块视图中,我正在获取$sub变量,如下所示:

@foreach ($sub as $sub)
   <tr class="gradeX">
      <td>
         <input type="checkbox" value="{{ $sub->id }}" id="check_{{ $sub->id }}"/>
      </td>
      <td>
         {{ $sub->module_name }} 
      </td>
      <td>
         {{ $sub->sub_module_name }} 
      </td>
      <td>
          <a onclick="edit_sub_module({{ $sub->id }})" title="Edit"><i class="icon-edit icon-2x"></i></a>
      </td>
    </tr>
@endforeach

它不显示来自sub_modules表($ sub-&gt; sub_module_name)的内容,仅显示来自模块。怎么解决这个?并且两个表中都有id字段,我只需要来自sub_modules的id。

4 个答案:

答案 0 :(得分:2)

解决了这个问题:

SubModules::join('modules', 'modules.id', '=','sub_modules.module_id')
->select('sub_modules.*','modules.module_name')->get‌​()

但是,任何人都知道如何用雄辩的关系来做到这一点?

答案 1 :(得分:0)

这个怎么样:

public function subModules() {
     return View::make('sub-modules',
                        array('title'=>'Sub-Modules',
                       'modules'=>Modules::all(),
                       'sub'=>Modules::with('submodules')->get()                 
                      )
     );
  }

答案 2 :(得分:0)

您可以调用AdminController.php

$module = new \App\Module::find(1); // put needed module_id;
$submodules = $module->submodules()
    ->join('modules', 'modules.id', '=','sub_modules.module_id')
    ->select('sub_modules.*','modules.module_name')
    ->get‌​();

$module->submodules()返回Illuminate\Database\Eloquent\Relations\HasMany课程,可以致电join()select()等。

答案 3 :(得分:0)

您无法使用&#34; get()&#34;来获取子模块数据

$ submoduledata = Module :: find($ id) - &gt; subModule() - &gt; get();