2016-04-07 52 views
1

让我先解释一下情况。Laravel显示2个表格的数据

我在页面上列出了可用的技能列表,例如“水管工”,“木匠”和“画家”,当我点击其中一项技能时,我想获得具有该技能和一次技能的清单点击一个勤杂工,我会得到关于他的全部细节。

然而,当我点击其中一个不想检索任何数据的技能时,就会显示技能。 “杂工”和“技能”这两个表格有许多关系,并且还有一个联结表。我在这里做错了什么?

Route::group(['middleware' => ['web']], function() { 

    Route::get('home', '[email protected]'); 

    Route::get('search', '[email protected]'); 

    Route::get('details/{handyman}', '[email protected]'); 

    Route::post('assignjob', '[email protected]'); 

    Route::get('addjob', '[email protected]'); 

    Route::post('addjform', '[email protected]'); 

    Route::get('jobs', '[email protected]'); 

    Route::get('jobsdetails/{jobId}', '[email protected]'); 

    Route::get('deletejob', '[email protected]'); 

    Route::post('deletejform', '[email protected]'); 

添加作业视图:

@extends('layouts.master') 

@section('title', 'Add Job') 
     @section('header2') 
      <ul> 
       <li><a href="{{url('assignjob')}}">Assign job</a></li> 
      </ul> 
     @show 
@section('content') 
    <h1>Handyman details</h1> 
    <ul> 
     @foreach ($handymen as $handyman) 
    <a href= "{{ url("[email protected]", $handyman->id) }}"> 
     {{$handyman->name}} 
    </a> 
@endforeach 
    </ul> 

控制器:

function search() 
    { 
     $skills = Skill::all(); 
     return view('layouts/search',['skills' => $skills]); 
    } 
function details($skillId) 
{ 
    $skill = Skill::find($skillId); 
    $handymen = $skill->handymen; 
    return view('layouts/details', ['handymen' => $handymen]); 
} 
+0

你能显示什么是'routes.php'里面也请提供技能查看。 –

+0

好的我已经更新了我的帖子,所有包含的技巧搜索和显示都与视图有关,除非你需要物理视图? –

+0

我已经看到一个问题:你的路由只接受一个参数,但方法'details'需要两个''Route :: get('jobsdetails/{jobId}','HandymanController @ jobsdetails');'。但是你可以附加'layouts/search'视图吗? –

回答

1

根据你编辑的问题,首先你列出你的搜索查看所有的技能。所以,在你的搜索视图中,您将有这样的事情:

@foreach ($skills as $skill) 
    <a href= "{{ action("[email protected]", $skill->id) }}"> 
     {{ $skill->name }} 
    </a> 
@endforeach 

所以,你必须在你的路由定义文件,这条路线:

Route::post('addjform/{skill}', '[email protected]'); 

这将指向勤杂工控制器,在那里你会列出有技能的所有杂工:

public function addjForm(Request $request, Skill $skill) 
{ 
    $handymen = $skill->handymen; 
    return view('layouts/skilledHandymen', ['skill' => $skill,'handymen' => $handymen]); 
} 

对于这个工作,你有技能模型来定义,该协会:

public function handymen() 
{ 
    return $this->belongsToMany(Handyman::class, 
          'handyman_skill', 
          'skill_id', 
          'handyman_id'); 
} 

控制器将指向一个观点,你会列出有这样的本事都能工巧匠:

在你的情况,如果你定义技能模型的关联链接到勤杂工它会更容易:

@foreach ($handymen as $handyman) 
    <a href= "{{ action("[email protected]", $handyman->id) }}"> 
     {{ $handyman->name }} 
    </a> 
@endforeach 

当你选择一个勤杂工,它会带你到勤杂工控制器的细节:

function details(Request $request, Handyman $handyman) 
{ 
    return view('layouts/details', ['handymen' => $handymen]); 
} 

为此,您将定义这条路线:

Route::get('/handyman/{handyman}', '[email protected]'); 

,这将最终指向你选择的勤杂工的详细信息,并可以显示他的详细信息:

<p>{{ $handyman->id }}<p> 
<p>{{ $handyman->name }}</p> 

这是很重要的明白这里的事情是,你会先有一个集合的技能,这将导致你的收藏杂工,而不是一个单一的。从第二个列表中选择一个Handyman后,您将能够显示他的详细信息。如果您尝试跳过这一步,您将尝试显示列表的详细信息。

希望这可以帮助...

+0

好吧我明白这里发生了什么,但我必须更新详细信息页面,列出这些杂工,因为目前只给我技能名称

  • {{$ skill-> skill}}
  • 。我将如何更新它?即从handymen表中显示first_name –

    +0

    为了显示每个handymen,你应该查看'$ handymen'列出了一个'@foreach($ handymen as $ handyman)',然后通过'handyman_id将每个链接到一个详细信息视图'。这会更容易。 – Laerte

    +0

    我会编辑答案来澄清。 – Laerte