V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
isCyan
V2EX  ›  PHP

Laravel 如何查詢一個模型的含有特定條件的最新的關聯模型?

  •  
  •   isCyan · 2016-10-19 23:31:23 +08:00 · 1297 次点击
    这是一个创建于 2773 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我剛剛在 StackOverflow 上提的問題,求解答。

    http://stackoverflow.com/questions/40135511/laravel-how-to-find-models-which-has-specific-latest-related-model

    一個 Package 模型,有許多 Step 模型。 Step 的字段中有這樣兩條, tinyint 型 status 字段和 時間戳字段。 假設一個 Package A ,有下列 steps

    • 18 號 10 點, status 爲 1
    • 19 號 9 點, status 爲 2

    假設一個 Package B ,有下列 steps

    • 19 號 8 點, status 爲 1
    • 19 號 9 點, status 爲 2
    • 19 號 10 點, status 爲 3

    這樣 A 的最新 step status 是 2 , B 是 3.

    然後,如何查詢出最新 step status 爲 2 的 packages ?

    我嘗試在 package 模型中加入

    public function steps()
    {
        return $this->hasMany('App\Step');
    }
    
    public function status()
    {
        return $this->steps()->latest()->limit(1);
    }
    

    然後這樣查詢

    Package::whereHas('status', function ($q) {
        $q->where('status', 2);
    })->get();
    

    但是卻不能得到期望的結果。

    所謂不是期望的結果,指的是,如果, packages 表 裏面,衹有 B 這一個,我想查詢出最新 step status 爲 2 的 packages , B 最新是 3 所以應該結果爲空,但這樣查詢出結果并不是空,而是包含了 B 。

    然後我試著換成

    public function status()
    {
        return $this->hasOne('App\Step')->latest();
    }
    

    也還是一樣。

    剛學 Laravel ,遇到這個問題很困惑,也查了很多 Google ,都沒有想要的答案。希望大家幫幫我,多謝!

    用的 Laravel 5.3

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2453 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:31 · PVG 20:31 · LAX 05:31 · JFK 08:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.