Yii2执行find()后向AR添加范围

时间:2014-07-23 12:31:59

标签: yii2

我有以下情况:

有一个project表和一个task表。 Project hasmany Task

所以,现在我做Project::find()->all()。所以我得到一个$projects对象,可以通过$projects[0]->task访问相关任务。

但在我看来,我还希望输出done = 0所有任务以及在接下来的7天内到期的任务数量。那么有可能在$projects[0]->task上添加范围吗?

Yii2的做法是什么?

2 个答案:

答案 0 :(得分:0)

基于分块的

The Yii Active Record方法(它们返回类的实例,另一个字$this变量)。所以你可以找到这样的必要tasks

Project:find()->joinWith('task')->where(['done' => 0])->all();

或使用The Query Builder获取tasks

$query = new Query();
$pTable = Project::tableName();
$tTable = Task::tableName();
$query->select($pTable.'.id AS project_id, '.$tTable.'.id as task_id, done');
$query->from($pTable);
$query->innerJoin($tTable, $pTable.'.id = '.$tTable.'.project_id');
$query->where(['done' => 0]);
$result = $query->all();

但在第二种情况下,您需要添加更多操作以将所有任务分组到父项目。

有关详细信息,请参阅Yii documentation

答案 1 :(得分:0)

我发现它是我自己的。有可能通过$ projects [0] - > getTasks()得到关系,然后我得到ActiveQuery来添加一个新的范围。