web-dev-qa-db-fra.com

Laravel 5 Appel de la méthode non définie Illuminate\Database\Query\Builder :: method ()

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
9
Liam

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

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.

0
Marcello Patto