Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

where в \IPS\Helpers\Form\Node

Здравствуйте. Столкнулся с проблемой, подскажите пожалуйста как с этим работать.

Если указывать where, то id у children будет начинаться с начала root а не ID в базе данных как должно быть.

			$where = ['id=? OR id=?', $match->team1, $match->team2];


			$form->add( new \IPS\Helpers\Form\Node( 'fball_matches_event_form_player', $this->player ? (int) $this->player : 0, TRUE, array(
				'class'         => 'IPS\fball\Team',
				'subnodes'			=> TRUE,
				'where'				=> $where,
				'permissionCheck'	=> function( $node )
				{
					return ($node instanceof \IPS\fball\Team\Player);
				}
			), NULL, NULL, NULL, 'fball_matches_event_form_player' ) );

Мне нужно, чтобы в списке нод отображались игроки только двух команд, я это сделал, всё работает идеально.

Но при сохранении формы, ID игрока - это ID игрока конкретной команды, а не игрока из БД.

Вот я выбрал https://prnt.sc/v2kpwa игрока с ID в базе данных - 3.

Сохраняем форму, у нас ID - 1 https://prnt.sc/v2kr0w это первый игрок команды 2.

Если where убрать, всё работает как надо, но отображаются все команды и игроки.

Как быть?

-----

Если делать как сейчас, единственное что я тут вижу, в сохранении формы загружать команду 2 и там получать ID первого игрока.

Рекомендованные сообщения

Насколько я помню, $where должно быть array(array())

			$where = [];
			$where[] = ['id=? OR id=?', $match->team1, $match->team2];

 

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

  • Автор
7 часов назад, newbie сказал:

Насколько я помню, $where должно быть array(array())

Тот же самый результат. https://prnt.sc/v39gh9

А в исходном коде ID'шники игроков правильные?

 

  • Автор
10 часов назад, newbie сказал:

А в исходном коде ID'шники игроков правильные?

 

Неа, тут тоже с новой команды идет с 1 https://prnt.sc/v3wwiy

- Посмотрите sql-запрос.

- Проверьте с 

			$where = [];
			$where[] = ['1=?', 1];

- Добавьте скобки

			$where = [];
			$where[] = ['(id=? OR id=?)', $match->team1, $match->team2];

 

  • Автор

@newbie Я тут еще разбираюсь с другим, как-то оно криво работает.

Если я указываю такой where, оно используется не только в выводе команд, но и игроков, т.е используется и для root и для child, мне надо только для root.

$where = [];
$where[] = ['id=?', 2];

https://prnt.sc/v503s8

			$form->add( new \IPS\Helpers\Form\Node( 'fball_matches_event_form_player', $this->player ? (int) $this->player : 0, TRUE, array(
				'class'         => 'IPS\fball\Team',
				'subnodes'			=> TRUE,
				'where'			=> $where,
				'permissionCheck'	=> function( $node )
				{
					return ($node instanceof \IPS\fball\Team\Player);
				}
			), NULL, NULL, NULL, 'fball_matches_event_form_player' ) );

 

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.