You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Laravel条件内的$item->loggable添加Comment类型提示?

可行的类型提示方案

你可以通过临时变量+类型注释的方式解决这个问题,既不会提前加载Comment实例,又能让IDE识别到正确的类型:

foreach ($items as $item) {
    // ...

    if ($item->loggable_type === Comment::class) {
        /** @var Comment $loggable */
        $loggable = $item->loggable;
        $loggable->resetDates();
    }

    // ...
}

原理很直接:

  • 先通过loggable_type判断类型,避免提前触发关联加载
  • 把$item->loggable赋值给临时变量$loggable,并用/** @var Comment $loggable */给变量做类型注释,IDE就能正确识别这个变量的类型,提供代码提示和类型检查

如果想让代码更简洁,还可以在Item模型中封装一个类型判断的辅助方法:

// 在Item模型中添加
public function isComment(): bool
{
    return $this->loggable_type === Comment::class;
}

之后在循环里这样用:

foreach ($items as $item) {
    // ...

    if ($item->isComment()) {
        /** @var Comment $loggable */
        $loggable = $item->loggable;
        $loggable->resetDates();
    }

    // ...
}

这两种方法都不会提前加载关联实例,同时解决了类型提示的问题。

内容的提问来源于stack exchange,提问作者Patrick Nomad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:57:34