Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Object of class IPS\Member could not be converted to string - Node


Przejdź do rozwiązania Rozwiązane przez DawPi,

Rekomendowane odpowiedzi

Hej,

Piszę swoją pierwszą apkę na IPS i napotkałem jeden problem. Po stworzeniu Node i inputa form, który pozwala dodać kilku użytkowników do bazy danych.

/**
   * [Node] Add/Edit Form
   *
   * @param	\IPS\Helpers\Form	$form	The form
   * @return	void
   */
  public function form(&$form)
  {
    $members = array();
    if (!empty($this->axenserverlist_owners)) {
      foreach (new \IPS\Patterns\ActiveRecordIterator(\IPS\Db::i()->select('*', 'core_members', array(\IPS\Db::i()->in('member_id', explode(",", $this->axenserverlist_owners)))), 'IPS\Member') as $member) {
        $members[] = $member;
      }
    }

    $form->add(new \IPS\Helpers\Form\Member('axenserverlist_owners', $members, FALSE, array('multiple' => null)));
  }

Przy zapisaniu rekordu wyskakuje mi błąd: Object of class IPS\Member could not be converted to string.

 

Szukałem co mogło powodować ten błąd, ale dokumentacji milczy (jak zawsze).
Kolumna axenserverlist_owners ma typ varchar max 100.

See me on GitHub or aXenDev.net!

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam, ponieważ:

Cytat

When the form is saved, any fields which match columns in the database table will be set automatically.

https://invisioncommunity.com/developers/docs/fundamentals/nodes/working-with-node-models-r28/

 

Ale chyba najwidoczniej jest potrzebny dla tego pola, tylko nie wiem jak ten błąd mam w tym zapisie opanować.

See me on GitHub or aXenDev.net!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager
  • Rozwiązanie

I to się wszystko zgadza, ale dla "prostych" typów danych. Ty tu używasz:

2 godziny temu, aXen napisał:

\IPS\Helpers\Form\Member

Więc przy zapisywaniu dostajesz obiekt, a nie np. ciąg znaków. Trzeba to skonwertować na możliwy zapis do stringa, co dostałeś w komunikacie błędu:

2 godziny temu, aXen napisał:

Przy zapisaniu rekordu wyskakuje mi błąd: Object of class IPS\Member could not be converted to string.

I sam nadałeś nawet taki typ:

2 godziny temu, aXen napisał:

Kolumna axenserverlist_owners ma typ varchar max 100.

A jako, że dodajesz wiele userów w to pole więc musisz dać coś takiego (przeładować tę metodę):

	/**
	 * [Node] Format form values from add/edit form for save
	 *
	 * @param	array	$values	Values from the form
	 * @return	array
	 */
	public function formatFormValues( $values )
	{
		if( !empty( $values['axenserverlist_owners'] ) )
		{
			$members = array();
			foreach ( $values['axenserverlist_owners'] as $member )
			{
				$members[] = $member->member_id;
			}
			$values['axenserverlist_owners'] = implode( ',', $members );
		}
		else
		{
			$values['axenserverlist_owners'] = NULL;
			$values['axenserverlist_owners'] = 'all';
		}
        
		return $values;
	}

 

  • Dziękuję 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Problem ROZWIĄZANY. Jeśli są jakiekolwiek wątpliwości, pytania proszę o założenie nowego tematu.

Wszelkie uzasadnione reklamacje/pretensje/sugestie/rady przyjmuje ekipa forum.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.