Laravel 'WHERE' 查询中断中的函数 API?

Laravel 'WHERE' function in query breaks API?

我正在尝试使用 DHTMLX 甘特图制作甘特图 API。

目标是只向特定用户显示特定的甘特图。因此,例如:如果我打开一份合同,它会向我显示该合同的甘特图,但如果我有 ex: purchases 的许可,那么它应该只向我显示具有特定 权限 ID[=39= 的行] 在 DB table Task.

现在问题出在这个函数的某个地方:

    public function getOne($id){
      $tasks = new Task();
      $links = new Link();

      return response()->json([
          "data" => $tasks->where('relation_id', $id)->where('permission', 2)->get(),
          "links" => $links->all()
      ]);
    }

'relation_id' 工作正常并且只显示一个项目,但是当我尝试添加另一个 WHERE 时它只是中断而没有错误并且没有加载图表信息。

我认为它必须对 JSON 做一些事情,就好像我只是在任何其他页面上发送这个查询而不插入 GANTT(就像 JSON)它向我显示了正确的信息.

所以基本上我需要使该查询与此 API 一起工作,我不知道为什么 1 行额外的语句会破坏它。

我也试过这样的WHERE语句:

"data" => $tasks->where([['relation_id', '=', $id],['permission','=',2]])->get()

这是甘特图的link:link

我按照他们文档中的步骤开始:link

您好,您正在实例化对象并尝试访问静态方法,因此失败了

试试这个

public function getOne($id){
  $tasks = Task::query();
  $links = Link::query();

  return response()->json([
      "data" => $tasks->where('relation_id', $id)->where('permission', 2)->get(),
      "links" => $links->get()
  ]);
}

尝试使用参数分组,解释如下:https://laravel.com/docs/master/queries#parameter-grouping。所以它看起来像:

$tasks->where(function($query) {
    $query->where(‘relation_id’, $id)
               ->where(‘permission’, 2);
})->get();

您也不需要包含“=”,因为如果您将其省略,Laravel 会在 where 语句中理解它(只有其他二元运算才需要)。

所以我说了这么多,但是为什么要创建一个新任务然后用 where 语句过滤它呢?您应该获得所有任务并以这种方式过滤它们。例如:

$tasks = Task::where(...)->get();
$links = Link::get();

return response()->json([‘tasks’ => $tasks, ‘links’ => $links]);

这更容易,应该会给您想要的结果。希望这对您有所帮助!

您没有创建新任务,因此请停止使用 new,您需要使用 query()

$tasks = Task::query();
$links = Link::query();

$tasks->where(['relation_id' => $id, 'permission' => 2])->get();