2015-05-19 6 views
7

Ich habe Projekte, die hasMany Benutzer und Benutzer belongsTo ein Projekt.Laravel 5 Aufruf zu undefinierter Methode Illuminate Database Query Builder :: method()

Ich möchte die Gesamtzahl der Benutzer eines Projekts zählen, also muss ich sie verknüpfen.

Auf diese Weise bekomme ich einen Call to undefined method Illuminate\Database\Query\Builder::user() Fehler.

Was mache ich falsch?

Controller:

class ProjectController extends Controller 
{ 
private $project; 

public function __construct(Project $project){ 

    $this->project = $project; 

//  $this->project = $project 
//   ->with('user'); 
} 


public function index(Project $project) 
{ 

    $projects = $project->with('user')->get(); 

    $currenttime = Carbon::now(); 

// return view('project.index', array('projects' => $projects, 'currenttime' => $currenttime)); 

    return view('user.index', compact('projects')); 
} 

}

Modell user:

public function project(){ 
    return $this->belongsTo('App\Project', 'project_id','id'); 
} 

Modell project:

public function users() { 
    return $this->hasMany('App\User', 'id'); 
} 

HTML/Blade:

@if(isset($projects)) 

    <table class="table table-striped table-hover table-dynamic datatable"> 
     <thead> 
     <tr> 
      <th>{{ trans('common.project') }}</th> 
      <th>{{ trans('common.workers') }}</th> 
      <th>{{ trans('common.completion_date') }}</th> 
      <th>{{ trans('common.status')}}</th> 
     </tr> 
     </thead> 
     <tbody> 
     @foreach($projects as $project) 
      <tr> 
       <td>{!! link_to_route('project.edit', $project->name, [$project->id])!!}</td> 
       <td>{{ $project->id }}</td> 
       <td>{{ $project->completion_date }}</td> 

       @if (($project->completed) == 1) 
        <td><span class="label label-success">{{ trans('common.completed') }}</span></td> 
       @elseif(($project->completion_date) < $currenttime) 
        <td><span class="label label-danger">{{ trans('common.toolate') }}</span></td> 
       @elseif(($project->active) == 0) 
        <td><span class="label label-default">{{ trans('common.inactive') }}</span></td> 
       @else 
        <td><span class="label label-warning">{{ trans('common.inprogress') }}</span></td> 
       @endif 

      </tr> 
     @endforeach 
     </tbody> 

    </table> 
@endif 
+0

Wie rufen Sie dieses '$ Projekt-> Benutzer;'? – vps

+0

'öffentlicher Funktionsindex (Projekt $ project)' von meinem Modell, wenn ich richtig liege? – Liam

+0

ok kannst du bitte versuchen 'dd ($ projects-> users)' '; – vps

Antwort

2

Sie haben den Namen der Methode zur Verfügung zu stellen, der die relationship.i definiert bedeuten Benutzer nicht Benutzer

public function index(Project $project) 
{ 
$projects = $project->with('users')->get(); 
$currenttime = Carbon::now(); 
// return view('project.index', array('projects' => $projects, 'currenttime' => $currenttime)); 

return view('user.index', compact('projects')); 
} 
+0

Ich habe den Fehler los, aber wenn ich dd ($ projects) zeigt es die Projekte, aber die Beziehungen sind leer '(#relations: array: 1 [▼ " users "=> Sammlung {# 256 ▼ #Artikel: [] } 'während sie Benutzer sind, die mit den Projekten in der Datenbank – Liam

+0

verbunden sind, funktioniert Ihre Beziehung nicht, weil Sie Benutzer nicht users.try verwenden, das –

+1

gerade herausgefunden es ein viel zu viele ist Beziehung und ich muss eine Pivot-Tabelle verwenden, das ist das Problem. – Liam

0

ich irgendwie das bin vor das gleiche Problem und sah einige Erklärungen wie:

public function project(){ 
    return $this->belongsToMany('App\Project', 'project_id','id'); 
} 

Was übrigens sehr sinnvoll ist.

Verwandte Themen