【问题标题】:How to read php object relations(custom attributes) in javascript如何在 javascript 中读取 php 对象关系(自定义属性)
【发布时间】:2017-04-04 10:58:31
【问题描述】:

我在任务模型中为活动创建了关系

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 中读取变量。 数组到字符串转换错误

如何解决这个问题?

【问题讨论】:

    标签: javascript php activerecord yii2


    【解决方案1】:

    据我所知,你不能。您必须遍历 $tasks 数组并在每个元素中调用 getActivitiesSum()find() 不能包含你的函数,因为它不是一个关系,你不能从 js 调用 PHP 的对象方法。

    我会创建一个单独的数组,由 Task 的 id 索引,其中包含每个任务的活动量:

    $tasks =  Task::find()->where(['project_id'=>$id])->all();
    $activities_count = [];
    foreach ($tasks as $task) {
      $activites_count[$task->id] = $task->getActivitiesSum();
    }
    

    现在您使用$tasks$activities_count 渲染视图。

    【讨论】:

    • 我已经得到了正确的总和,正如我在 foreach 循环中所说的 $task->activitiesSum 返回正确的数量。问题是在json中编码时对象不显示它。
    • 我知道。我要告诉你的是,据我所知,你必须创建一个单独的数组来存储每个任务的活动计数,并使用两个数组(活动量数组可以由 Tasks id 索引,这样易于使用)
    • 谢谢,暂时可以解决。但我想如果有人可以描述 json 和相对模型总和的问题。
    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多