gpt4 book ai didi

laravel - 如何通过 Eloquent 上的关系静态使用 where 子句?

转载 作者:行者123 更新时间:2023-12-04 09:54:27 26 4
gpt4 key购买 nike

在我的 Laravel 应用程序中,我有 3 个模型类:Project , TaskTaskState .这基本上是代码:
Project.php

class Project extends Model
{
// ...

public function tasks()
{
return $this->hasMany('App\Task');
}
}
Task.php
class Task extends Model
{
// ...

public function project()
{
return $this->belongsTo('App\Project');
}

public function state()
{
return $this->hasOne('App\TaskState');
}
}
TaskState.php
class TaskState extends Model
{
// ...

public function task()
{
return $this->belongsTo('App\Task');
}
}

我想从项目中过滤所有处于“打开”状态的任务。现在我正在使用 join 子句,但是 我想知道是否可以使用这样的东西 :
Task::where('state.name', 'open')->get();

我不明白为什么这不起作用,因为可以从类的“内部”使用 where 子句上的点。例如,来自 getFooAtribute()方法:
class Project extends Model
{
// ...

public function getOpenTasksSumAttribute()
{
// This works. Why not from outside?
return $this->tasks->where('state.name', 'open')->count();
}
}

编辑 : whereHas()方法解决了我的问题。

还有上面的 getOpenTasksSumAttribute()方法实际上不起作用,但是当我更改 Task 时它起作用了型号到 return this->belongsTo('App\TaskState'); .

最佳答案

不要认为它们中的任何一个都应该起作用。通常的做法是使用whereHas()做有条件的关系。

Task::whereHas('state', function ($query) {
$query->where('name', 'open');
})->get();

关于laravel - 如何通过 Eloquent 上的关系静态使用 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61951439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com