2017-04-04 67 views
1

PHP对象关系(自定义属性),我创建的关系在任务模型活动如何阅读的JavaScript

public funtion getActivitiesSum() 
{ 
    return $this->hasMany(Activities::className(),['task_id'=>'id'])->sum('amount'); 

} 

我得到正确的总和,计算确定。查询也可以,当测试在foreach循环中打印总和时,打印正确的总金额。

$tasks = Task::find()->where(['project_id'=>$id])->all(); 

在查看文件我在任务变量上使用javascript函数。我试图用Json :: encode传递,但无法读取关系自定义属性activitiesSum。当我尝试打印时返回未定义。

return $this->render('view',[ 
    'tasks' => Json::encode($tasks) 
]); 

此外,我试图返回没有编码,但无法读取JavaScript中的varibale。 阵列到字符串转换错误

如何解决此问题?

回答

1

据我所知,你不能。您必须遍历$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的看法。

+0

我已经得到正确的总和,正如我在foreach循环$ task-> activitiesSum中返回正确的值。问题是该对象在json中编码时不显示它。 – tigrasti

+0

我知道。我告诉你的是,据我所知,你必须创建一个单独的数组来存储每个任务的活动计数,并使用两个数组(活动数组可以通过Tasks id进行索引,这样很容易处理) – gmc

+0

谢谢,现在可以解决。但我想如果有人能用json和相关模型和来描述问题。 – tigrasti