方法未在Query类上定义

时间:2013-05-11 15:28:51

标签: php mysql laravel eloquent database-relations

我有一些相关的模型:

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上过滤项目和客户端。 (我的计划是允许连接到公司的多个用户查看他们所有的项目和客户。)

1 个答案:

答案 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);