gpt4 book ai didi

mysql - Laravel 4 Eager Loading 过滤并仅选择匹配结果

转载 作者:行者123 更新时间:2023-11-29 00:26:37 25 4
gpt4 key购买 nike

我正在尝试输出仅包含匹配元素的过滤结果。

我有两个表(在实际项目中,将是 5 个),假设是 companiesprojects。一家公司可能有多个项目,也可能没有。

这些是关系:

/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();

This is the output JSON

如果我将值从 99 更改为 1(products.id 为 1 的结果),它会变为 this :

我只想从我发布的第二个 JSON 中获取第二个结果

正如您在第二个 JSON 中看到的(我正在使用 this parser 进行检查),无论项目如何,所有公司都被加载,并且只有匹配的行具有对象 projects

会有更多的'with',我不知道如何只过滤匹配的元素。

我也在闭包中尝试了 having(),但还是一样:

$query->having('projects.id','=',99);

有没有办法只过滤匹配的结果(不使用循环),输出将只包含具有匹配项目对象的结果?

编辑:实际上,将过滤 5 个表。

公司项目作品用户user_works

比方说;“公司”有很多项目。“项目”有很多作品“Works”有很多用户,“Users”也可能有多个作品(数据透视表user_works)。

所有关系都根据模型正确设置。

我想对这些进行全局搜索。

类似于:“给我用户 ID 1 的作品,其中公司 ID 为 5,项目 ID 为 4”,但没有一个字段是必填的。所以这些对于搜索也是有效的:“把项目id为2的所有人的作品给我”,或者“把id 2的作品给我”,或者“把今天开始的所有作品都给我”,“把id 1的项目的作品给我” 2", "把公司id 1今年完成的工作给我拿过来"。

提前致谢

最佳答案

使用 whereHas() 是我的解决方案。它过滤关系并影响主查询中返回的结果。

关于mysql - Laravel 4 Eager Loading 过滤并仅选择匹配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18615847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com