Laravel雄辩的问题:方法不存在

时间:2017-04-13 14:20:32

标签: laravel laravel-5 eloquent laravel-eloquent

我有两张桌子,客户和公司 每家公司都有很多客户,每个客户都有一家公司

这是我的模特:

class Client extends Model
{
    public function company(){
        return $this->hasOne('App\Company');
    }
}

class Company extends Model
{
    public function clients(){
        return $this->hasMany('App\Client');
    }
}

我正在尝试获取公司所有客户的列表 这就是我试图做的事情:

$clients = Company::where('guid',$guid)->clients()->all();

我收到了这个错误:

BadMethodCallException in Macroable.php line 74:
Method clients does not exist.

谢谢你的帮助!

2 个答案:

答案 0 :(得分:5)

$clients = Company::where('guid',$guid);

这将返回Builder类,因此当您添加->clients()时,它会给您错误,因为构建器类没有您的模型所使用的clients方法。

正确的代码是..

$clients = Company::with('clients')->where('guid',$guid)->get();

PS。不要使用->all(),除非$companies = Company::all()

答案 1 :(得分:0)

您在模型中定义的关系必须像这样调用:

#include <string>
#include <array>
#include <vector>
#include <iostream>

int main() {
  int N;
  std::cin >> N;

  constexpr const int Split = 2;
  using StringPack = std::array<std::string, Split>;
  std::vector<StringPack> output;
  for (int wordIndex = 0; wordIndex < N; ++wordIndex) {
    std::string word;
    std::cin >> word;
    StringPack out;
    {
      int index = 0;
      for (char c : word) {
        out[index % Split] += c;
        ++index;
      }
    }
    output.emplace_back(out);
  }
  for (const auto & out : output) {
    for (const auto & word : out) {
      std::cout << word << ' ';
    }
    std::cout << '\n';
  }
}

它将查询贵公司的所有客户端,不要使用方法all()来执行此操作。在您的客户端模型上执行相同的操作以便公司进行搜索。

$clients = Company::where('guid',$guid)->clients;