Функция Laravel «ГДЕ» в запросе прерывает API?

Я пытаюсь сделать диаграмму Ганта, используя 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()
      ]);
    }

'relation_id' работает нормально и показывает только один проект, но когда я пытаюсь добавить другой WHERE, он просто ломается без ошибок и не загружает информацию о графике.

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

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

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

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

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

Я выполнил шаги в их документации, чтобы начать: связь

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

попробуй это

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

Спасибо за ответ. К сожалению, тот же результат, никаких ошибок в консоли или где-либо еще... Но статический метод не терпит неудачу с одним оператором? Интересно.

Schribs 30.05.2019 08:33

должно. вы можете просто попробовать удалить где и посмотреть, есть ли у вас данные?

Jagadesha NH 30.05.2019 10:03

Если я удалю часть WHERE Permission - она ​​покажет мне диаграмму без проблем, но без исключений. Столбец разрешений равен 100% со значениями 2. Обновлено: я думаю, проблема в том, что эти диаграммы теряют свою родительскую строку. Я постараюсь разобраться.

Schribs 30.05.2019 13:53

Я был прав, это была и родительская проблема. Теперь у меня есть разные обручи для прыжков, но спасибо за ответ. Пусть жук-лорд не перейдет вам дорогу, добрый сэр!

Schribs 30.05.2019 14:40

Попробуйте использовать группировку параметров, описанную здесь: https://laravel.com/docs/master/queries#группировка параметров. Таким образом, это будет выглядеть примерно так:

$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]);

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

Спасибо за совет, к сожалению, это выдает внутреннюю ошибку 500 в консоли. TypeError: Cannot read property 'length' of undefined

Schribs 30.05.2019 13:56

@Schribs, пожалуйста, предоставьте более подробную информацию. Эта ошибка звучит так, будто вы пытаетесь получить доступ к свойству «длина» чего-то, чего не существует (это не должно вызывать эту ошибку, потому что мы ничего не делаем со свойством «длина»). Может быть ошибка, вызванная чем-то, что происходит после этой функции.

Ian 30.05.2019 22:55

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

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

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

Другие вопросы по теме