2016-04-07 55 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