webentwicklung-frage-antwort-db.com.de

Laravel 5 Aufruf an eine nicht definierte Methode Illuminate\Database\Query\Builder :: method ()

Ich habe Projekte, die hasMany Benutzer und Benutzer belongsTo ein Projekt haben.

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

Auf diese Weise erhalte 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
9
Liam

Sie müssen den Methodennamen angeben, der die Beziehung definiert. Ich meine 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'));
}
3
Imtiaz Pabel

Ich bin mit dem gleichen Problem konfrontiert und habe einige Erklärungen gesehen wie:

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

Das macht übrigens sehr viel Sinn.

0
Marcello Patto