php - Laravel 显示来自 2 个表的数据

标签 php mysql laravel

先说明一下情况

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

显示技能,但是当我单击其中一项技能时,它不想检索任何数据。 “杂工”和“技能”表都具有多对多关系,并且还有一个联结表。我在这里做错了什么?

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

添加作业 View :

@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>

Controller :

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

最佳答案

根据您编辑的问题,首先您在搜索 View 中列出所有技能。因此,在您的搜索 View 中,您会看到类似这样的内容:

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

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

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

这将指向 Handyman Controller,您将在其中列出所有具有该技能的 handymen:

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

Controller 将指向一个 View ,您将在其中列出所有具有此类技能的勤杂工:

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

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

当你选择一个杂工时,它会带你到杂工 Controller 的详细信息:

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>

这里需要了解的重要一点是,您将首先拥有一系列技能,这些技能将引导您获得 Handymen 系列,而不仅仅是一个。从第二个列表中选择一名杂工后,您将能够显示他的详细信息。如果您尝试跳过此步骤,您将尝试显示列表的详细信息。

希望这有助于...

关于php - Laravel 显示来自 2 个表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36474962/

相关文章:

PHP 认证库

php - Laravel Eloquent : ordering Many-to-Many query- user favorites first

PHP 特征 "Method does not exist"

PHP 表单更新无需注销

php - 匹配并查找数据库中数组中的所有值

php - 如何按键刷新Magento缓存?

php - 带有SQLSRV驱动程序错误的Docker PHP-FPM Alpine

mysql - 修改后的预购树 : selecting top elements of specific type

php - 当数据库查询返回无/空结果时,Foreach 循环中断

jQuery 选择 : display multiple select fields on the same page