【发布时间】:2013-09-04 13:56:10
【问题描述】:
我正在尝试仅输出匹配元素的过滤结果。
我有两个表(在实际项目中,这将是 5 个),比如说 companies 和 projects。一家公司可能有多个项目,也可能没有。
这些是关系:
/app/models/Company.php
<?php
class Company extends Eloquent {
public function projects() {
return $this->hasMany('Project','companyID');
}
protected $table = 'companies';
}
/app/models/Project.php
<?php
class Project extends Eloquent {
public function companies() {
return $this->belongsTo('Company','companyID');
}
}
我想做的是,我想同时获得它们的结果,但只能使用匹配的参数。
我试过了:
return Company::with(array('projects'=>function($query){
$query->where('id',99); //project's id is 99
}))->get();
如果我将值从99 更改为1(products.id 为1 的结果),它会更改为this:
我只想从我发布的第二个 JSON 中获取第二个结果。
正如您在第二个 JSON 中看到的(我使用 this parser 进行检查),无论项目如何,所有公司都已加载,并且只有匹配的行具有对象 projects。
会有更多的'with',我不知道如何只过滤匹配的元素。
我也试过 having() 在闭包里,但还是一样:
$query->having('projects.id','=',99);
有没有办法只过滤匹配的结果(不使用循环),输出将只包含具有匹配项目对象的结果?
编辑:实际上,将过滤 5 个表格。
companies、projects、works、users 和 user_works
比方说; “公司”有很多项目。 “项目”有很多作品 “作品”有很多用户,“用户”也可能有多个作品(数据透视表 user_works)。
所有关系都从模型中正确设置。
我想对这些进行全局搜索。
类似于:“将用户 id 为 1 的作品带给我,其公司 id 为 5,项目 id 为 4”,但没有一个字段是强制性的。 所以这些也适用于搜索:“给我带来每个id为2的项目的作品”,或“给我带来id为2的作品”,或“给我带来从今天开始的所有作品”,“给我带来id为1的项目作品” 2", "给我带来公司 id 1 的今年完成的工作"。
提前致谢
【问题讨论】:
标签: mysql laravel laravel-4 eloquent