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