2015-05-19 15 views
7

Ho progetti che sono gli utenti hasMany e gli utenti belongsTo un progetto.Laravel 5 Chiamata a metodo non definito Illuminate Database Query Builder :: method()

Voglio contare il numero totale di utenti di un progetto, quindi ho bisogno di collegarli.

In questo modo viene visualizzato un errore Call to undefined method Illuminate\Database\Query\Builder::user().

Cosa sto sbagliando?

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

}

Modello user:

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

Modello project:

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

HTML/lama:

@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

Come stai chiamando questo '$ project-> users;'? – vps

+0

'indice funzione pubblica (progetto $ progetto)' dal mio modello, se ho ragione? – Liam

+0

ok, per favore, prova 'dd ($ projects-> users)'; – vps

risposta

2

è necessario fornire il nome del metodo che definisce la relationship.I significa che gli utenti non utenti

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

Mi sono liberato dell'errore, ma quando ho dd ($ projects) mostrerà i progetti ma le relazioni sono vuote '(#relations: array: 1 [▼ " users "=> Collezione {# 256 ▼ #items: [] } 'mentre sono utenti collegati ai progetti nella banca dati – Liam

+0

la tua relazione non funzionerà perché stai usando utente non users.try questo –

+1

Appena scoperto è un numero molti a molti relazione e devo usare una tabella pivot, questo è il problema. – Liam

0

che sto affrontando una sorta di stesso problema e ha visto alcune spiegazioni come:

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

Il che ha molto senso, a proposito.

Problemi correlati