Laravel显示来自2个表的数据


Laravel displaying data from 2 tables

让我先解释一下情况。

我在页面上列出了可用的技能列表,如"水管工"、"木匠"answers"画家",当我点击其中一项技能时,我想得到一个拥有该技能的杂工列表,一旦点击一个杂工,我就会得到关于他的全部详细信息。

然而,当我点击其中一个技能时,它不想检索任何数据,技能就会显示出来。表"杂工"answers"技能"都有多对多的关系,而且还有一个连接表。我在这里做错了什么?

Route::group(['middleware' => ['web']], function () {
    Route::get('home', 'HandymanController@home');
    Route::get('search', 'HandymanController@search');
    Route::get('details/{handyman}', 'HandymanController@details');
    Route::post('assignjob', 'HandymanController@assignJob');
    Route::get('addjob', 'HandymanController@addJob');
    Route::post('addjform', 'HandymanController@addjForm');
    Route::get('jobs', 'HandymanController@jobs');
    Route::get('jobsdetails/{jobId}', 'HandymanController@jobsdetails');
    Route::get('deletejob', 'HandymanController@deleteJob');
    Route::post('deletejform', 'HandymanController@deletejForm');

添加作业视图:

@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("HandymanController@details", $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]);
}

根据您编辑的问题,首先在搜索视图中列出所有技能。所以,在你的搜索视图中,你会有这样的东西:

@foreach ($skills as $skill)
   <a href= "{{ action("HandymanController@addjForm", $skill->id) }}">
      {{ $skill->name }}
   </a>
@endforeach

所以你必须在你的路线文件中定义这个路线:

Route::post('addjform/{skill}', 'HandymanController@addjForm');

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

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');
}

控制器将指向一个视图,在该视图中,您将列出所有具有此技能的杂工:

在您的情况下,如果您在技能模型中定义一个链接到Handyman:的关联,会更容易

@foreach ($handymen as $handyman)
   <a href= "{{ action("HandymanController@details", $handyman->id) }}">
      {{ $handyman->name }}
   </a>
@endforeach

当你选择一个杂工时,它会带你去杂工控制器详细信息:

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

为此,您将定义此路线:

Route::get('/handyman/{handyman}', 'Handyman@details');

这将最终为您指明所选杂工的详细信息,您可以显示他的详细信息:

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

这里需要理解的重要一点是,你将首先拥有一系列技能,这些技能将引导你获得一系列熟练工,而不仅仅是一个。在你从第二个列表中选择一个勤杂工后,你将能够显示他的详细信息。如果你试图跳过这一步,你将试图显示列表的详细信息。

希望这能帮助。。。