gpt4 book ai didi

php - 如何在 laravel 中获取只有子数据的父数据

转载 作者:行者123 更新时间:2023-12-05 09:14:49 24 4
gpt4 key购买 nike

我正在尝试从只有一个 child 的 parent 那里获取所有数据。请在下面查看我的代码。

$customers = Customer::with(['items' => function($query){
return $query->where('status', 2);
}])->get();

dd($customers);

但是上面的代码返回了所有的客户。顺便说一下,我使用的是 laravel 4.2。

项目表: enter image description here

客户表: enter image description here

最佳答案

with() 用于预加载。这基本上意味着,沿着主模型,Laravel 将预加载您指定的关系。如果您有一组模型并且想要为所有模型加载关系,这将特别有用。因为使用预先加载,您只需运行一个额外的数据库查询,而不是为集合中的每个模型运行一个查询。

has()是根据关系过滤选择模型。所以它的行为与普通的 WHERE 条件非常相似。如果您只使用 has('relation') ,则意味着您只想获得至少具有此关系中的一个相关模型的模型。

例如:

$users = Customer::has('items')->get();
// only Customer that have at least one item are contained in the collection

whereHas() 的工作原理与 has() 基本相同,但允许您为要检查的相关模型指定额外的过滤器。

例如

$users = Customer::whereHas('items', function($q){
$q->where('status', 2);
})->get();
// only customer that have item status 2

将group by添加到计算总和这是我的代码中的另一个例子:

Customer::select(['customer.name', DB::raw('sum(sale.amount_to_pay) AS total_amount'), 'customer.id'])
->where('customer.store_id', User::storeId())
->join('sale', 'sale.customer_id', '=', 'customer.id')
->groupBy('customer.id', 'customer.name')
->orderBy('total_amount', 'desc')
->take($i)
->get()

在你的情况下:

Customer::select(['customer_id', DB::raw('sum(quantity) AS total')])
->whereHas('items', function ($q) {
$q->where('status', 2);
})
->groupBy('customer_id')
->get();

whereHas() 允许您过滤数据或查询您案例中的相关模型那些有元素且状态为 2 的客户

在获取数据后我们正在执行 ->groupBy('customer_id')

GROUP BY 语句通常与聚合函数(COUNT、MAX、MIN、SUM、AVG)一起使用,以按一列或多列对结果集进行分组。

select(['customer_id', DB::raw('sum(quantity) AS total')])这将选择客户 ID 并计算数量列的总和

关于php - 如何在 laravel 中获取只有子数据的父数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53441941/

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