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

Laravel WhereHas only the latest record on the HasMany Relationship

我有 Items table 与 Histories table.

我想统计只有最新 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();
    }

Also do you have any solution for count the items that doesn't have history? Check docs for doesntHave

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