2015-05-19 19 views
7

Tôi có các dự án mà hasMany người dùng và người dùng belongsTo một dự án.Laravel 5 Gọi phương thức không xác định Phương thức Illuminate Database Query Builder ::()

Tôi muốn tính tổng số lượng người dùng mà một dự án có để tôi cần liên kết chúng.

Bằng cách này, tôi nhận được lỗi Call to undefined method Illuminate\Database\Query\Builder::user().

Tôi đang làm gì sai?

Bộ điều khiển:

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

}

Mẫu user:

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

Mẫu 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 
+0

Làm cách nào bạn gọi '$ project-> người dùng này'? – vps

+0

'chỉ số chức năng công cộng (dự án $ dự án)' từ mô hình của tôi, nếu tôi đúng? – Liam

+0

ok bạn có thể thử 'dd ($ projects-> users)'; – vps

Trả lời

2

Bạn phải cung cấp tên phương pháp định nghĩa relationship.I nghĩa là người dùng không sử dụng

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

Tôi đã loại bỏ lỗi, nhưng khi tôi dd ($ dự án) nó sẽ hiển thị các dự án nhưng quan hệ trống rỗng '(#relations: array: 1 [▼ " users "=> Bộ sưu tập {# 256 ▼ #items: [] } 'trong khi họ là người dùng được liên kết với các dự án trong cơ sở dữ liệu – Liam

+0

mối quan hệ của bạn sẽ không hoạt động vì bạn đang sử dụng người dùng không phải người dùng.hãy làm việc này –

+1

quan hệ và tôi phải sử dụng bảng tổng hợp, đó là vấn đề. – Liam

0

Tôi đang phải đối mặt với loại của cùng một vấn đề và thấy một số giải thích như:

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

Mà làm cho rất nhiều ý nghĩa, bằng cách này.

Các vấn đề liên quan