2017-04-04 61 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