我有一些相关的模型:
Client
id, name, user_id ++
Projects
id, title, client_id, user_id ++
Users
id, name ++
一个客户端属于一个用户,一个客户端有多个项目,一个项目属于一个客户端和一个用户。
当我尝试以下查询以获取客户端的项目时,我得到一个错误说
Method [projects] is not defined on the Query class.
这是什么意思?
我尝试了以下查询:
Client::find(2)->where('user_id', '=', Auth::user()->id)->projects() // Throws error
Client::where('id', '=', 2)->where('user_id', '=', Auth::user()->id)->projects() // Also throwing an error
下面的查询可以很好地工作:
Client::find(2)->projects
我的模型很简单,看起来像这样:
<?php
class Client extends Eloquent
{
public static $timestamps = TRUE;
public function user()
{
return $this->belongs_to('User');
}
public function projects()
{
return $this->has_many('Project');
}
}
class Project extends Eloquent
{
public static $timestamps = TRUE;
public function client()
{
return $this->belongs_to('Client');
}
public function user()
{
return $this->belongs_to('User');
}
}
class User extends Eloquent
{
public static $timestamps = TRUE;
public function clients()
{
return $this->has_many('Client');
}
public function projects()
{
return $this->has_many('Project');
}
}
为什么当我使用where子句时不起作用?它的工作原理,当我不使用where子句,但我需要过滤项目和客户端的user_id为好。(我的计划是允许多个用户连接到一个公司看到他们所有的项目和客户。)
您实际上没有从查询中检索任何内容,只需添加first()
或添加get()
然后循环并调用您的projects()
。
应该是这样的:
Client::where('id', '=', 2)->where('user_id', '=', Auth::user()->id)->first()->projects()
根据你的评论,它应该也工作单行:
Client::find(2)->projects()->where('user_id', '=', Auth::user()->id);