Я пытаюсь сделать диаграмму Ганта, используя 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()
Вот ссылка на диаграмму Ганта: связь
Я выполнил шаги в их документации, чтобы начать: связь






Привет, вы создаете экземпляр объекта и пытаетесь получить доступ к статическому методу, следовательно, его ошибка
попробуй это
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()
]);
}
должно. вы можете просто попробовать удалить где и посмотреть, есть ли у вас данные?
Если я удалю часть WHERE Permission - она покажет мне диаграмму без проблем, но без исключений. Столбец разрешений равен 100% со значениями 2. Обновлено: я думаю, проблема в том, что эти диаграммы теряют свою родительскую строку. Я постараюсь разобраться.
Я был прав, это была и родительская проблема. Теперь у меня есть разные обручи для прыжков, но спасибо за ответ. Пусть жук-лорд не перейдет вам дорогу, добрый сэр!
Попробуйте использовать группировку параметров, описанную здесь: 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, пожалуйста, предоставьте более подробную информацию. Эта ошибка звучит так, будто вы пытаетесь получить доступ к свойству «длина» чего-то, чего не существует (это не должно вызывать эту ошибку, потому что мы ничего не делаем со свойством «длина»). Может быть ошибка, вызванная чем-то, что происходит после этой функции.
Вы не создаете новую задачу, поэтому прекратите использовать новый, вам нужно использовать запрос()
$tasks = Task::query();
$links = Link::query();
$tasks->where(['relation_id' => $id, 'permission' => 2])->get();
Спасибо за ответ. К сожалению, тот же результат, никаких ошибок в консоли или где-либо еще... Но статический метод не терпит неудачу с одним оператором? Интересно.