2016-08-04 15 views
0

Ich habe 2 Tabellen.Fehler erhalten, wenn Daten aus anderen Tabelle Laravel 5.2

  1. Benutzer (Name, Benutzername, E-Mail, Passwort, remember_token)
  2. dosen (iddosen, namedosen, Adresse, Telefonnummer)

ich will in 1 Aufruf Daten aus zwei Tabellen zeigen.

mein User-Modell:

public function profildosen() 
{ 
    return $this->belongsTo('App\Dosen'); 
} 

Dosen Modell:

public function user() 
{ 
    return $this->hasOne('App\User'); 
} 

Ansicht:

@foreach($dosen as $key => $value)     
<strong>Kode Dosen :</strong> {{ $value->profildosen->iddosen }}<br> 
<strong>Nama :</strong> {{ $value->profildosen->namedosen}}<br> 
<strong>Alamat :</strong> {{ $value->profildosen->address}}<br> 
<strong>No HP :</strong> {{ $value->phonenumber}} <br> 
<strong>Email :</strong> {{ $value->email }}<br> 
@endforeach 

Methode:

$dosen = User::paginate(5); 
return view('admin/dosen.index', compact('dosen')); 

und bekam Fehler:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'dosen.id' in 'where  clause' (SQL: select * from `dosen` where `dosen`.`id` is null limit 1) (View: D:\XAMPP\htdocs\infodosenku\resources\views\admin\dosen\index.blade.php) 

was ist die richtige Methode?

UPDATE

Scheme Database

Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('username'); 
     $table->string('email')->unique(); 
     $table->string('password', 60); 
     $table->boolean('admin')->default(0); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 

Schema::create('dosen', function (Blueprint $table) { 
     $table->string('id'); 
     $table->string('user_id'); 
     $table->string('nipy'); 
     $table->string('namadosen'); 
     $table->string('alamatdosen'); 
     $table->integer('notelpdosen'); 
     $table->timestamps(); 
    }); 

Route:

Route::resource('/admin/dosen', 'AdminController', 
      ['except' => ['show']]); 

Controller:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Support\Facades\Request; 
use App\Http\Requests; 
use App\Http\Requests\CreateDosenRequest; 
use App\Dosen; 
use App\User; 
use Illuminate\Support\Facades\Input; 
use DB; 

class AdminController extends Controller 
{ 
public function index() 
{ 
    // ambil semua data dosen 
    $dosen = User::paginate(5); 
    return view('admin/dosen.index', compact('dosen')); 

} 

public function create() 
{ 
    return view('admin/dosen.create'); 
} 

public function store(CreateDosenRequest $request) 
{ 
    $user = User::create([ 
     'name' => $request->input('name'), 
     'username' => $request->input('username'), 
     'email' => $request->input('email'), 
     'password' => bcrypt($request->input['password']), 
     'admin' => $request->input('admin') 
    ]); 




     $dosen = Dosen::create([ 
     'id' => $request->input('iddosen'), 
     'nipy' => $request->input('nipy'), 
     'namadosen' => $user->name, 
     'user_id' => $user->id, 
     'alamatdosen' => $request->input('alamatdosen'), 
     'notelpdosen' => $request->input('notelpdosen'), 
    ]); 


    return redirect('admin/dosen')->with('message', 'Data berhasil ditambahkan!');    
} 

public function show($id) 
{ 
    $dosen = User::find($id); 
    return view('admin/dosen/show', compact('dosen')); 
} 

public function edit($id) 
{ 
    $dosen = User::find($id); 

    return view('admin.dosen.edit', compact('dosen')); 
} 

public function update($id) 
{ 
    $dosenUpdate = Request::all(); 
    $dosen = User::find($id); 
    $dosen->update($dosenUpdate); 
    return redirect('admin.dosen')->with('message', 'Data berhasil diubah!'); 
} 

public function destroy($id) 
{  
    User::find($id)->delete(); 
    return redirect('admin.dosen')->with('message', 'Data berhasil dihapus!'); 
} 
} 

Und meine Ansicht:

@extends('layouts.app') 
@section('content') 
<div class="container"> 
    <div class="row"> 
     <div class="col-md-10 col-md-offset-1"> 
     <div class="panel panel-default"> 
      <div class="panel-heading">Daftar Dosen</div> 
       <div class="panel-body"> 
       <form class ="form-inline" action="{{ URL('/dosen/hasil/') }}" action="GET"> 
         <div class="form-group"> 
          <label for="cari">Cari Dosen </label> 
          <input type="text" class="form-control" id="cari" name="cari" placeholder="Masukan Nama Dosen"> 
         </div> 
          <input class="btn btn-primary" type="submit" value="Cari"> 

        </form><br> 
        <table class="table table-striped table-bordered"> 
          <thead> 
           <tr> 

            <td>Nama</td> 
            <td>username</td> 

            <td>Actions</td> 
           </tr> 
          </thead> 
         <tbody> 
      @foreach($dosen as $key => $value) 
        <tr> 

         <td>{{ $value->name }}</td> 
         <td>{{ $value->username}}</td> 


         <td> 
          {!! Form::open(['url' => 'dosen/' . $value->id . '/edit', 'style'=>'display:inline-block']) !!} 
          {!! Form::hidden('_method', 'GET') !!} 
          {{ Form::button('<i class="fa fa-pencil-square-o"></i>', ['type' => 'submit', 'class' => 'btn btn-warning', 'title' => 'Ubah']) }} 
          {!! Form::close() !!} 

          <button title="Tampilkan" type="button" class="btn btn-success" data-toggle="modal" data-target="#myModal-{{ $value->id }}"><i class="fa fa-share"></i></button> 

          <!-- Modal --> 
          <div class="modal fade" id="myModal-{{ $value->id }}" role="dialog"> 
          <div class="modal-dialog modal-sm"> 
           <div class="modal-content"> 
           <div class="modal-header"> 
            <button type="button" class="close" data-dismiss="modal">&times;</button> 
            <h4 class="modal-title">{{ $value->namadosen }}</h4> 
           </div> 
           <div class="modal-body" style="overflow:auto;">    
             <strong>Kode Dosen :</strong> {{ $value->dosen->id }}<br> 
             <strong>NIP/NIPY :</strong> {{ $value->nipy }}<br> 
             <strong>Nama :</strong> {{ $value->namadosen }}<br> 
             <strong>Alamat :</strong> {{ $value->alamatdosen }}<br> 
             <strong>No HP :</strong> {{ $value->notelpdosen }} <br> 

           </div> 
           <div class="modal-footer"> 
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
           </div> 
           </div> 
          </div> 
          </div> 
          {!! Form::open(['url' => 'dosen/' . $value->id, 'style'=>'display:inline-block']) !!} 
          {!! Form::hidden('_method', 'DELETE') !!} 
          {{ Form::button('<i class="fa fa-trash"></i>', ['type' => 'submit', 'class' => 'btn btn-danger', 'title' => 'Hapus']) }} 
          {!! Form::close() !!} 
          {!! Form::model($value, ['route' => ['admin.dosen.update', $value->id], 'method' => 'PUT']) !!} 
         </td> 
        </tr> 
      @endforeach 
        </tbody> 
       </table> 
       <h5><span class="label label-default"> 
       Showing {!! $dosen->count() !!} results from total {!! $dosen->total() !!} results. 
       </span></h5> 
      <div> {!! $dosen->links() !!} </div> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 
@endsection 

Dosen Modell:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Dosen extends Model 
{ 
protected $table = 'dosen'; 

protected $fillable = ['iddosen', 'namadosen', 'user_id', 'nipy', 'kodeprogdidosen','alamatdosen', 'notelpdosen', 'tempatlahirdosen', 'tanggallahirdosen', 'agamadosen', 'emaildosen', 'sandidosen', 'jkldosen', 'fotodosen']; 

protected $casts = [ 
'iddosen' => 'varchar', 
]; 

public function dosen() 
{ 
    return $this->belongsTo('App\Dosen'); 
} 
} 

Benutzermodell:

<?php 
namespace App; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = [ 
    'name', 'username', 'email', 'password', 'admin', 
]; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = [ 
    'password', 'remember_token', 
]; 

public function profildosen() 
{ 
    return $this->belongsTo('App\Dosen'); 
} 
} 

Antwort

0

Von Laravel Docs

Eloquent bestimmt die Standard-Fremdschlüssel Namen durch die Untersuchung des Namens helfen der Beziehung Methode und suffixing den Methodennamen mit _id.

Ihr Funktionsname ist profiledosen so wird Laravel dass Tabelle in Ihrem in Ihrem Dosen übernehmen Sie haben id Feld als primäre Kennung.

Sie können es nur iddosen-id ändern und dann Methodennamen

public function dosen() 
{ 
    return $this->belongsTo('App\Dosen'); 
} 

Alternativ zu

ändern können Sie den benutzerdefinierten Primärschlüssel zu Ihrer Methode liefern wie

public function profildosen() 
{ 
    return $this->belongsTo('App\Dosen', 'iddosen'); 
} 
+0

ich habe Änderung iddosen zu id. aber immer noch Fehler Versuch, Eigenschaft von Nicht-Objekt zu bekommen – Ezra

+0

Ich habe Fehler: Methode profildosen existiert nicht – Ezra

+0

Wenn Sie die erste Lösung anwenden, dann habe ich ahve, um den Funktionsnamen zu 'public function dosen()' und zu ändern Innerhalb Ihrer foreach-Schleife sollten Sie '$ value-> profildosen-> iddosen 'zu' $ value-> dosen-> id' ersetzen. Für alle Felder in foreach –

0

Der Grund dafür ist, dass Sie schlecht Tisch ID ein so statt dosen.id identifizieren Sie sollte dosen.iddosen
verwenden So sollte die Abfrage so aussehen:Sie können auch den Laravel Query Builder More verwenden.
Aber das Wichtigste ist, dass Sie wissen müssen, auf welchen Spalten Sie Ihre Tabellen verbinden.
Hope it