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

I'm trying to make Gantt's chart using DHTMLX Gantt API.

The goal is to show only certain Gantt's lines to certain users. So for example: if I open a contract it shows me the Gantt's chart of that contract, but if I have permission for ex: purchases, then it should only show me the line with certain permission ID which is in the DB table Task.

Now the problem is somewhere around this function:

    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()
      ]);
    }

The 'relation_id' works fine and shows only a single project, but when I try to add another WHERE it just breaks without errors and doesn't load the chart information.

I think it has to do something with the JSON as if I do just send this query on any other page without inserting into GANTT (just as JSON) it shows me the correct information.

So basically I need to make that query work with this API, I have no clue about why 1 extra line of statement would break it.

I also tried the WHERE statement like this:

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

Here is the link to the Gantt chart: link

I followed the steps in their documentation to start: link

Hi your instantiating an object and trying to access a static method hence, its failing

try this

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()
  ]);
}

Try using parameter grouping, explained here: https://laravel.com/docs/master/queries#parameter-grouping. So it’ll look something like:

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

You also don’t need to have the “=” as this is understood by Laravel in the where statement if you leave it out (it’s only necessary for the other binary operations).

So I say all of this, but why are you creating a new task and then filtering it with a where statement? You should be getting all of the tasks and filtering them that way. For example:

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

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

This is easier and should give you the result you’re looking for. Hope this helps!

You are not creating a new task so stop using new, you need to go with query()

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

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