doujian7132
2019-05-30 06:06
浏览 106
已采纳

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • duanpie4763 2019-05-30 06:22
    已采纳

    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()
      ]);
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • douba6365 2019-05-30 06:26

    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!

    评论
    解决 无用
    打赏 举报
  • dsxpt62448 2019-05-30 06:28

    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();
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题