我已经在事件的任务模型中创建了关系
public funtion getActivitiesSum()
{
return $this->hasMany(Activities::className(),['task_id'=>'id'])->sum('amount');
}
我得到了正确的总和,并且计算没问题。查询也可以,当测试在 foreach 循环中打印总和时,它会打印正确的总和。
$tasks = Task::find()->where(['project_id'=>$id])->all();
在 View 文件中,我在任务变量上使用 JavaScript 函数。我尝试使用 Json::encode 传递,但无法读取关系自定义属性 activitiesSum 。当我尝试打印时返回未定义。
return $this->render('view',[
'tasks' => Json::encode($tasks)
]);
我也尝试在不编码的情况下返回,但无法读取 JavaScript 中的变量。 数组到字符串转换错误
如何解决这个问题?
最佳答案
据我所知,你不能。您必须循环遍历 $tasks
数组并在每个元素中调用 getActivitiesSum()
。 find()
不能包含您的函数,因为它不是关系,并且您不能从 js 调用 PHP 的对象方法。
我将创建一个单独的数组,由任务的 id
索引,其中包含每个任务的事件量:
$tasks = Task::find()->where(['project_id'=>$id])->all();
$activities_count = [];
foreach ($tasks as $task) {
$activites_count[$task->id] = $task->getActivitiesSum();
}
现在,您可以使用 $tasks
和 $activities_count
渲染 View 。
关于javascript - 如何在javascript中读取php对象关系(自定义属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43205283/