Laravel 'ГДЕ' функция в API разбивает запросы? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать диаграмму Ганта с использованием DHTMLX Gantt API.

Цель состоит в том, чтобы показывать только определенные строки Ганта определенным пользователям. Так, например: если я открываю контракт, он показывает мне диаграмму Гантта этого контракта, но если у меня есть разрешение на ex: покупки, то он должен показывать только строку с определенным идентификатором разрешения , который находится в БД Таблица Задача .

Теперь проблема где-то рядом с этой функцией:

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

'ratio_id' отлично работает и показывает только один проект, но когда я пытаюсь добавить еще один ГДЕ, он просто ломается без ошибок и не загружает информацию диаграммы.

Я думаю, что это должно что-то делать с JSON, как будто я просто отправляю этот запрос на любую другую страницу, не вставляя в GANTT (так же, как JSON), он показывает мне правильную информацию.

Так что, в основном, мне нужно, чтобы этот запрос работал с этим API, я понятия не имею, почему 1 дополнительная строка оператора может его сломать.

Я также попробовал выражение WHERE следующим образом:

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

Вот ссылка на диаграмму Ганта: ссылка

Для начала я следовал инструкциям в их документации: ссылка

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Попробуйте использовать группировку параметров, объясненную здесь: 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]);

Это проще и должно дать вам результат, который вы ищете.Надеюсь, это поможет!

0 голосов
/ 30 мая 2019

Вы не создаете новую задачу, поэтому прекратите использовать new , вам нужно перейти с query ()

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

$tasks->where(['relation_id' => $id, 'permission' => 2])->get();
0 голосов
/ 30 мая 2019

Привет, ваш экземпляр объекта и попытка получить доступ к статическому методу, следовательно, его сбой

попробуйте это

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