gpt4 book ai didi

mysql - Laravel根据子表获取 "completed"行的列表

转载 作者:行者123 更新时间:2023-11-29 09:36:12 24 4
gpt4 key购买 nike

这是我无法弄清楚的问题:
我有一个“客户”表和一个“盒子”表。
每个盒子都属于一个客户。
我需要显示所有属于每个客户端的所有盒子都已完成的客户端,这基本上是 WHERE box.status =“Completed”。

我无法掌握如何在一个查询中完成这一切:
-获取所有客户
-获取属于每个客户端的所有盒子的数量($totalBoxes)
-获取属于每个客户的已完成盒子的数量($completedBoxes)
-计算$completedBoxes = $totalBoxes
-仅显示 $completedBoxes = $totalBoxes 的客户端

我用它来获取 Client.id = 2 的 $totalBoxes 数量

Client::leftJoin('boxes', 'clients.id','=', 'boxes.clients_id')  
->where('clients_id','=',2)
->select('clients.id','boxes.clients_id','boxes.status as status')
->count();

我用它来获取 Client.id = 2 的 $completedBoxes 数量

Client::leftJoin('boxes', 'clients.id','=', 'boxes.clients_id')  
->where('clients_id','=',2)
->where('boxes.status','=',"Completed")
->select('clients.id','boxes.clients_id','boxes.status as status')
->count();
if ($completedBoxes == $totalBoxes) {  
//echo Client row..
}

我只是不知道如何在客户端行的主查询/循环中动态执行这些子查询..

示例:

客户(id)
1
2
3

框(id、client_id、状态)
1,1,处理
2,1,已完成
3,2,已完成
4,2,已完成
5,3,处理
6,3,完成

所以我的预期结果是:

已完成客户列表
-客户端2

非常感谢您的帮助,非常感谢!

编辑

嘿 Chin - 非常感谢,这帮助我得到了我需要的东西!我最终在 Controller 中使用了以下代码,它返回了我想要的结果。但是,在 Blade 中显示此内容的最佳方式是什么?

$clients = Client::all();

foreach ($clients as $client){
$active = $client->boxes()
->where('status', '!=' ,'Shipping')
->select('client_id')
->orderBy('client_id')
->distinct()
->get();
echo $active;
}

我希望做这样的事情:

$completedClients = Client::boxes()
->where('status', '!=' ,'Shipping')
->select('client_id')
->orderBy('client_id')
->distinct()
->get();

然后我就可以在我的 Blade 中运行我的循环,但 Client::boxes 是不正确的语法。在您引用的链接中,示例是find(1),但我需要它为每个客户端运行。

再次感谢!

编辑2
嘿,很抱歉回复晚了,我注意到最初提出的解决方案没有返回正确的结果这是我的最新代码:

$completed = Client::whereHas('boxes', function (Builder $query) {
$query->where('status', '=', 'Shipping');
})
->select('id')
->orderBy('id','asc')
->distinct()
->get();

所以问题是它返回一个 Client,其中任何 Box.status = Completed。我只需要返回所有框=已完成的客户。在我原来的帖子中,应该返回的示例客户端是客户端 #2,因为它们的所有框都 = 已完成。

最佳答案

试试这个:https://laravel.com/docs/5.8/eloquent-relationships#one-to-many

在客户端模型中添加如下内容:

public function Boxes() {
return $this->hasMany('App\Box');
}

在 Controller 中是这样的:

$clients = Client::all();
return $clients->Boxes()->where('status', 'Completed')->get();

关于mysql - Laravel根据子表获取 "completed"行的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57562075/

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