php laravel应用程序列表(如果最后状态为关闭)

ux6nzvsh  于 12个月前  发布在  PHP
关注(0)|答案(3)|浏览(146)

最后状态关闭的应用程序
用户表1:应用
| ID(pk)|名称|
| --|--|
| 1 |Naveed|
表2:状况
| ID(pk)|地位|application_id(fk)|
| --|--|--|
| 1 |未决| 1 |
| 2 |提交| 1 |
| 3 |关闭| 1 |
| 4 |观察| 1 |
现在我想得到应用程序列表如果最后状态是关闭.只添加此应用程序在列表中的最后状态是关闭.注意:此应用程序不添加到列表中有至少一个状态关闭.
给定的打击代码是错误的。

$applicationsWithClosedStatus = Application::whereHas('statuses', function ($query) {
    $query->where('status', 'closed');
})->get();

字符串
又一个错误

public function status() {
        return $this->hasOne(Status::class)->latest ();
    }
$applicationsWithLastClosedStatus = Application::whereHas('status', function ($query) {
    $query->where('status', 'closed');
})->get();

yhxst69z

yhxst69z1#

试试这个

\DB::select("select id from applications where id in (select application_id from (select max(id), application_id from statuses where status="closed" group by application_id) AS t1)")

字符串

qnyhuwrf

qnyhuwrf2#

如果最后一个状态为关闭,则获取数据

SELECT s.*
FROM statuses as s
INNER JOIN applications as a on a.id = s.application_id
WHERE s.id IN (  
  SELECT MAX(s.id) as max_id
  FROM statuses as s 
  GROUP BY s.application_id
) AND s.status = 'closed'

字符串

wh6knrhe

wh6knrhe3#

我通常是这样解决的:在一个扩展了Illuminate\Database\Eloquent\Model的ApplicationModel模型中,有一个像你这样的函数作为状态。

use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;
use ......\Status;

....

public function status(): HasMany
{
    return $this->hasMany(Status::class);
}

字符串
现在你可以这样使用:

use ......\Application;

...

public function getApplicationWithStatus()
{
    $application = new Application();
    $result = $application::with('status')
      ->where('status', 'closed')
      ->get();

    return $result !== null ? $result : false;
}


现在的结果应该是预期的结果。希望对你有帮助。

相关问题