2013-05-22 2 views
2

У меня есть две таблицы, модули (id,module_name) и sub_modules (id,module_id,sub_module_name). Я хочу, чтобы отобразить таблицу, как эта структура:Извлечь данные из двух соединенных таблиц с использованием laravel eloquent

Sub Module ID | Module Name | Sub Module Name 

modules.php (модель)

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 (контроллер)

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_module_name), показывая только из модулей. Как это решить? А также есть поле id в обеих таблицах, и мне нужен только идентификатор из sub_modules.

+0

решаемая проблема с этим: подмодулях :: присоединиться ('модули', 'modules.id', '=', 'sub_modules.module_id') -> выберите ('modules.module_name' 'sub_modules *.) -> get(). Но кто-нибудь знает, как это сделать с красноречивым отношением? – devo

+0

Было бы лучше, если бы вы могли ответить на свой комментарий, чтобы люди увидели его, когда нашли свой вопрос. –

+0

@ Аншад, как говорит Фил, ставит его в качестве ответа. Отношения между мужчинами и женщинами не будут создавать набор результатов для вас так, как вам нужно. –

ответ

2

решаемая проблема с этим:

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

Но кто знает, как сделать это с красноречивым отношения?

+1

, как вы это делаете с красноречивым отношением? – vision

0

Как об этом:

public function subModules() { 
    return View::make('sub-modules', 
         array('title'=>'Sub-Modules', 
         'modules'=>Modules::all(), 
         'sub'=>Modules::with('submodules')->get()     
        ) 
    ); 
    } 
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() и т.д. для этого.

0

Вы не можете получить вложенные данные модуля без использования "получить()"

$ submoduledata = Module :: найти ($ ID) -> подмодуль() -> получить();

Смежные вопросы