簡體   English   中英

Laravel 顯示來自 2 個表的數據

[英]Laravel displaying data from 2 tables

我先說明一下情況。

我在頁面上有可用的技能列表,例如“水管工”、“木匠”和“畫家”,當我點擊其中一項技能時,我想獲得具有該技能的雜工列表,一旦點擊了雜工我得到了關於他的全部細節。

但是,當我單擊其中一項不想檢索任何數據的技能時,會顯示技能。 兩個表“雜工”和“技能”都有多對多的關系,並且還有一個連接表。 我在這里做錯了什么?

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>

在這里要了解的重要一點是,您將首先擁有一系列技能,這些技能將引導您獲得一系列雜工,而不僅僅是一個。 從第二個列表中選擇一名雜工后,您將能夠顯示他的詳細信息。 如果您嘗試跳過此步驟,您將嘗試顯示列表的詳細信息。

希望這可以幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM