0

我有一些相关的模型:

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

4

1 回答 1

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);
于 2013-05-11T16:18:23.507 回答