web-dev-qa-db-ja.com

Laravel 5未定義のメソッドIlluminate \ Database \ Query \ Builder :: method()の呼び出し

hasManyユーザーのプロジェクトがあり、ユーザーbelongsToがプロジェクトです。

プロジェクトのユーザーの総数をカウントしたいので、それらをリンクする必要があります。

これにより、Call to undefined method Illuminate\Database\Query\Builder::user()エラーが発生します。

何が悪いのですか?

コントローラ:

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

}

モデルuser

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

モデルproject

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

HTML /ブレード:

 @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
10
Liam

関係を定義するメソッド名を指定する必要があります。つまり、ユーザーではなくユーザー

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

私は同じような問題に直面しており、次のようないくつかの説明を見ました:

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

ところで、これはかなり理にかなっています。

0
Marcello Patto