J'ai des projets dont hasMany
utilisateurs et des utilisateurs belongsTo
un projet.
Je souhaite compter le nombre total d'utilisateurs d'un projet et je dois donc les lier.
De cette façon, je reçois une erreur Call to undefined method Illuminate\Database\Query\Builder::user()
.
Qu'est-ce que je fais mal?
Manette:
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'));
}
}
Modèle user
:
public function project(){
return $this->belongsTo('App\Project', 'project_id','id');
}
Modèle 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
Vous devez fournir le nom de la méthode qui définit la relation.Je veux dire les utilisateurs pas utilisateur
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'));
}
Je suis confronté en quelque sorte au même problème et j'ai vu des explications comme:
public function project(){
return $this->belongsToMany('App\Project', 'project_id','id');
}
Ce qui fait beaucoup de sens, au fait.