繁体   English   中英

Laravel WhereHas 只有 HasMany 关系的最新记录

[英]Laravel WhereHas only the latest record on the HasMany Relationship

我有与History表有关的Items表。

我想计算只有最新history.status项目

我仍然无法得到完全相同的计数结果,因为它总是计算所有历史而不是最新的

这是我的代码:

create_items_table.php

Schema::create('items', function (Blueprint $table) {
        $table->id();
        $table->string('code');
        $table->string('name');
        $table->longText('description')->nullable();
        $table->longText('picture')->nullable();
        $table->timestamps();
    });

create_histories_table.php

$table->foreignId('item_id')->constrained();
$table->string('status')->nullable();
$table->longText('description')->nullable();
$table->dateTime('date')->nullable();

Item.php的模型

public function histories(){
        return $this->hasMany(History::class);
    }
public function latestHistory(){
        return $this->hasOne(History::class)->latest();
    }

History.php模型

public function item()
{
    return $this->belongsTo(Item::class);
}

MyController.php

 $items_status['good'] = Item::with('latestHistory')->whereHas('latestHistory', function ($q) {
            $q->where('status', 'good');
        })->count();

 $items_status['broken'] = Item::with('latestHistory')->whereHas('latestHistory', function ($q) {
            $q->where('status', 'broken');
        })->count();

dd($items_status);

我猜你的意思是latestOfMany()

//Item.php
public function latestHistory() {
        return $this->hasOne(History::class)->latestOfMany();
    }

您还有什么解决方案可以计算没有历史记录的项目吗? 检查文档是否doesntHave

$items_status['no_history'] = Item::doesntHave('history')->count();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM