2016-12-09 2 views
0

Ich habe einige Online-Handbücher verwendet, um eine Dropdown-Box aus der Datenbank mit Hilfe der Rupffunktion zu füllen. Dies funktioniert in create, aber wenn die Tabelle angezeigt und der Datensatz angezeigt wird, wird nur die ID und nicht der Suchwert aus der Tabelle angezeigt, auf die verwiesen wird. Ich habe versucht, die Daten in die customers.show zurückzugeben und die Ansicht zu ändern, aber es kann nicht funktionieren.Laravel-Lookup-Wert in Tabelle

Controller:

public function show($id) 
    { 
     $company = Companies::find($id); 
     $customers = $this->customersRepository->findWithoutFail($id); 

     if (empty($customers)) { 
      Flash::error('Customers not found'); 

      return redirect(route('customers.index')); 
     } 

     return view('customers.show') 
     ->with('customers', $customers) 
     ->with('company', $company); 
    } 

Dann wird die Ansicht:

<!-- Company Id Field --> 
<div class="form-group"> 
    {!! Form::label('company_id', 'Company Id:') !!} 
    <p>{!! $company->name !!}</p> 
</div> 

Ich glaube auch ich die richtige Beziehung Setup im Modell haben:

public function company() 
    { 
     return $this->belongsTo(\App\Models\Company::class); 
    } 

Ich glaube, etwas stimmt nicht mit die $company = Companies::find($id) Ich möchte es das Feld customers.company_id finden. Wenn ich die ID des Datensatzes manuell aus der Unternehmenstabelle z. 1 Es gibt Daten korrekt zurück.

In der Kundentabelle gibt es eine Spalte company_id, die auf die Spaltenspalten-ID der Firma beschränkt ist. Dank

+0

Versuchen Sie Folgendes zurückzukehren: 'Rückkehr Ansicht (‚customers.show‘, kompakt (" Kunden "," Firma "));' – manniL

+0

Ich denke, das Problem liegt bei '$ Firma = Firmen :: finden ($ ID);' Ich möchte nicht die Firma aus dem ID-Feld, sondern stattdessen die Company_id Feld. Wenn ich die ID manuell z. '3' gibt die Daten zurück, die ich möchte. –

Antwort

0

Try this:

return view('customers.show', compact('company', 'customers')); 

Und ich bin nicht wirklich sicher, was Feld wollen Sie zeigen und was genau funktioniert nicht.

EDIT: Wenn Sie eine belongsTo relationshop für das Unternehmen in Ihrem Kundenmodell haben, können Sie dies versuchen:

$customer->company->name 
+0

Dies ist die Kundentabelle, die Firmen-ID verweist auf die Firmentabelle, aber ich möchte companies.name für die ID im Feld customers.company_id zurückgeben. –

+0

Wenn Sie in Ihrem Kundenmodell ein religionsop für das Unternehmen haben, können Sie folgendes versuchen: '$ customer-> company-> name' –

+0

Vielen Dank! Das hat funktioniert! Ich kann nicht glauben, dass es so einfach war. Wenn Sie als Antwort einreichen, werde ich es markieren. –

0

Nach dem letzten Tag verbringen oder so stoßen im Dunkeln, ich dachte, dass ich Ich werde zurückkommen und sehen, ob ich nicht anders konnte, als einen klareren Weg für diejenigen zu finden, die folgen.

Ich werde meinen eigenen Code verwenden, also gibt es noch ein anderes Beispiel für diese hypothetische Person da draußen.

Meine Situation: Ich habe ein Jobmodell mit einer "Status" -Spalte, aber es ist nur eine ID. Und das ist nicht sehr hilfreich.

  • Job

    • Status
  • Jobstatus

    • status_id
    • Titel
    • Beschreibung


Ersten oben: die Lookup-Tabelle
Die Tabelle mit den zusätzlichen Informationen. Falls Sie sich nicht sicher waren, muss dieses Modell nichts tun.Existiere einfach und arbeite so, wie es soll.

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class JobStatus extends Model 
{ 

    protected $primarykey = "status_id"; //Because my key is not Laravel-standard 
} 


Zweitens: Das "Parent" Table
Die 'anhängt' und 'get__Attribute' sind noch verborgene Leckereien in Laravel, die automatisch Ihr Modell Abfrage erweitern.

Was mich wirklich abschreckte war, dass ich dachte, dass das "goesTo" in der Nachschlagetabelle sein sollte.

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Job extends Model { 

    // . . . 

    //Can be anything - but 'status' was taken 
    protected $appends = ['job_status']; 

    //Needs to be camel case of $appends 
    public function getJobStatusAttribute() { 
     return $this->status()->first(); 
    } 

    public function status() { 
     return $this->belongsTo('App\JobStatus', 'status', 'status_id'); // Again, not the Laravel-iest keys 
    } 


Drittens: Der Controller
Nichts relevant hier, aber ich möchte einen vollständigen Überblick geben, was los ist. Nur ein normaler Aufruf an das Modell (mit einer speziellen Funktion). Schließlich

<?php 

//. . . . 

class AccountController extends Controller { 

    public function loadaccount() { 

     $job = Job::currentjob(); 

     return view('account/account', [ 
      'job' => $job, 
     ]); 

} 

, The View

// account.blade.php 

@section('content') 

@if($job) 
    Progress Report for "{{ $job->title }}"<br/>  
    Status: {{ $job->job_status->title }}<br/> 
    {{ $job->job_status->description }}<br/> 
</div> 
@endif 

// . . . . // 

Hoffnung, das hilft.


(Bemerkenswert, um ihrer selbst willen Ehrlichkeit, dass diese Antwort auf diesen Kerl im Grunde Dank ist :)
https://laracasts.com/discuss/channels/laravel/need-to-append-a-field-from-a-lookup-table-in-my-result-collection