我有一些相关的模型:
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上过滤项目和客户端。 (我的计划是允许连接到公司的多个用户查看他们所有的项目和客户。)
答案 0 :(得分:2)
您实际上没有从查询中检索任何内容,只需添加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);