我正在尝试仅输出匹配元素的过滤器结果。
我有两个表(在实际项目中,这将是 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 的结果),它将更改为:
我只想从我发布的第二个 JSON 中获得第二个结果。
正如您在第二个 JSON 中看到的(我正在使用此解析器进行检查),无论项目如何,所有公司都已加载,并且只有匹配的行具有 object 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 今年完成的工作".
提前致谢