Anlegen und einfügen einer Tabelle mittels Migrations-Datei

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17405
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Was ich gerade versuche dir zu sagen ( du hast den Artikel https://area51.phpbb.com/docs/dev/3.3.x ... anges.html anscheinend nicht gelesen ) :

Deine selbstgebaute public function import_optin() wird niemals ausgeführt, weil der Migrations Assistent diese Funktion ja nicht kennt.

Der kennt nur:
public function update_schema()
public function revert_schema()
public function update_data()
public function revert_data()

Du musst ihm schon sagen, das er eine von dir selbst erstellt function mit ausführen soll.

Beispiele dazu hatte ich bereits verlinkt.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3557
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ja habe eben gesehen das ich was vergessen habe in der datei.

Habe das vergessen:

Code: Alles auswählen

	public function update_data()
	{
		return array(

			array('custom', array(array($this, 'import_optin'))),

		);
	}
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17405
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Sag mal, was soll dein letztes angegebene SQL Statement denn nun machen ?????

So sollte es sein:

Code: Alles auswählen

$sql_ary = array(
	'chris1278_name' => 'c1s_1_enable',
	);

	$sql = 'UPDATE ' . phpbb_chris1278_cookie '
		SET ' . $db->sql_build_array('UPDATE', $sql_ary) ;
	$db->sql_query($sql);

Wenn du nur ein einzigen Key ( chris1278_name ) hast, brauchst du keine WHERE Klausel um einen neuen Value zu setzen.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3557
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ich hab mir die Database_update datei nochmal angesehen und da ist mir aufgefallen das ich das in der neuen migrationsdatei vergessen hatte.

Ich habe jetzt eine andere Fehlermedlung.

Die datei sieht jetzt so aus:

Code: Alles auswählen

<?php
/**
*
* Opt-In Cookie Manager by klaro Script extension for the phpBB Forum Software package.
* @copyright (c) 2020 (Christian-Esch.de) and Kirk https://reyno41.bplaced.net/phpbb
* @license GNU General Public License, version 2 (GPL-2.0)
*
*/
namespace chris1278\cookie\migrations;

class v_1_0_4 extends \phpbb\db\migration\migration
{
	public function effectively_installed()
	{
		return;
	}

	static public function depends_on()
	{
		return array('\chris1278\cookie\migrations\v_1_0_3');
	}
	
	public function update_data()
	{
		return array(

			array('custom', array(array($this, 'import_optin'))),

		);
	}

	public function import_optin()
	{
		$sqlary = array(
		
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET chris1278_name =  neuer_name_fuer_cs1_enabled 	WHERE ' . $this->db->sql_in_set('chris1278_name', 'cs_1_enabled'),
		
		);

		foreach ($sqlary as $sql)
		{
			$this->db->sql_query($sql);
		}
	}
}
Und wenn ich das aktiviere kommt da so ein schoner Allgemeiner Fehler:

Code: Alles auswählen

SQL ERROR [ mysqli ]

Unknown column 'neuer_name_fuer_cs1_enabled' in 'field list' [1054]

SQL

UPDATE phpbb_chris1278_cookie SET chris1278_name = neuer_name_fuer_cs1_enabled WHERE chris1278_name = 'cs_1_enabled'

BACKTRACE
Ich denke das an dem update code noch ein syntax fehler vorlieg.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17405
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

ok, ich bin raus.... du testest nicht einmal den Code von uns, geschweige du liest dich nicht in die Doku ein....
Benutzeravatar
chris1278
Mitglied
Beiträge: 3557
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Dr.Death hat geschrieben: 28.08.2021 12:26 Wenn du nur ein einzigen Key ( chris1278_name ) hast, brauchst du keine WHERE Klausel um einen neuen Value zu setzen.

Ich weis nicht ob du weist wodrauf ich hinauswill.

Die Tabelle sieht im moment so aus:

https://prnt.sc/1qo6bkt


und ich möchte mit der migration jede Variable die in der Spalte chris1278_name ist einen neuen namen geben.

Ich kann dies über phpmyadmin machen wie schon gesagt dann sähe das so aus:

Code: Alles auswählen

UPDATE phpbb_chris1278_cookie SET chris1278_name = 'neuer_name' WHERE chris1278_name = 'cs_1_enable' 
Und das versuche ich eben umzusetzen.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17405
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

omg... sag das doch gleich...

dann muss du für jedes einzelne update ein eigenes SQL bauen und auch einzeln ausführen lassen.

Code: Alles auswählen

	$sql = 'UPDATE ' . $this->table_prefix . 'chris1278_cookie 
	SET chris1278_name = neuer_name1
	WHERE chris1278_name = alter_name1';
Oder in "schön" : ( pro update ein neuer Block )

Code: Alles auswählen

	$sql_ary = [
		'chris1278_name'		=> 'neuer_name1',
	];
					
	$sql = 'UPDATE ' . $this->table_prefix . 'chris1278_cookie 
	SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
	WHERE chris1278_name = alter_name1';
	
	$this->db->sql_query($sql);

Das alles sind nur Anregungen..... und sollen kein Copy & Paste Vorlage sein.... es gibt bestimmt elegantere Wege das zu lösen.
Zudem deine Key Bezeichnungen leider nicht "selbsterklärend" sind.... keiner weiß was man mit "cs_11_enable" anfangen kann oder soll...
Benutzeravatar
chris1278
Mitglied
Beiträge: 3557
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ich werde das nachher probieren:

Bei der Schön variante hätte ich noch 1 bis 2 fragen:

Code: Alles auswählen

	
	
	$sql_ary = [
		'chris1278_name'		=> 'neuer_name1',
	];
					
	$sql = 'UPDATE ' . $this->table_prefix . 'chris1278_cookie 
	SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
	WHERE chris1278_name = alter_name1';
	
	$this->db->sql_query($sql);
wenn ich jetzt mehrere blöcke mache also pro variable einer müsste das dann so aussehen:



Code: Alles auswählen

	$sql_ary = [
		'chris1278_name'		=> 'neuer_name1',
	];
					
	$sql = 'UPDATE ' . $this->table_prefix . 'chris1278_cookie 
	SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
	WHERE chris1278_name = alter_name1';
	
	$this->db->sql_query($sql);
	
		$sql_ary = [
		'chris1278_name'		=> 'neuer_name2',
	];
					
	$sql = 'UPDATE ' . $this->table_prefix . 'chris1278_cookie 
	SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
	WHERE chris1278_name = alter_name2';
	
	$this->db->sql_query($sql);
	
	usw. 


und müsste das vom syntax her nicht diese zeile WHERE chris1278_name = alter_name2'; anstelle eines semikolons icht ein komma sein?

Ich werde aber erstmal mit dem von dir testen. melde mich dann später.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17405
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Die Variable $sql ist ja kein Array.... ich glaube du solltest mal die Syntax von PHP lernen....

Wie man Array Zeilen abschließt, wie man Befehle abschließt, wie man Zeichenketten verbindet, wie und wann man doppelte Anführungszeichen verwendet und auch warum....und wann einzelne Anführungszeichen und auch warum.


probier das mal, sollte ohne Syntax Fehler sein..... musst du halt noch anpassen.
Ob es funktioniert weiß ich nicht, hab es mal so

Code: Alles auswählen

	public function import_optin()
	{
		$sql_ary = [
		
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs1_enabled"  WHERE "chris1278_name" = "old1"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs2_enabled"  WHERE "chris1278_name" = "old2"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs3_enabled"  WHERE "chris1278_name" = "old3"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs4_enabled"  WHERE "chris1278_name" = "old4"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs5_enabled"  WHERE "chris1278_name" = "old5"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs6_enabled"  WHERE "chris1278_name" = "old6"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs7_enabled"  WHERE "chris1278_name" = "old7"',
		'UPDATE ' . $this->table_prefix . 'chris1278_cookie SET "chris1278_name" =  "neuer_name_fuer_cs8_enabled"  WHERE "chris1278_name" = "old8"',
		
		];

		foreach ($sql_ary as $sql)
		{
			$this->db->sql_query($sql);
		}
	}
Benutzeravatar
chris1278
Mitglied
Beiträge: 3557
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ja da bist du nicht der einzige der mir das sagt. Z.B. Der Luke sagt mir das auch. Ich habe leider so gut wie keinerlei Grundkenntnisse in php Programmierung. Damit muss ich leider erst noch anfangen.

Nichts desto trotz kann ich eigentlich ganz zufrieden sein mit dem was ich bisher erreicht habe. Auch wenn's nicht perfekt ist. Aber mit jedem Versuch lern ich halt auch dazu. Auch wenn's nur sehr schleppend vorangeht. Auf jeden fall bin ich immer wieder gerne hier im Forum.

@edit

Das letzte sieht so aus wie das was ich für das erste anlegen der Variablen nutze. Ich melde mich später.
Zuletzt geändert von chris1278 am 28.08.2021 14:00, insgesamt 1-mal geändert.
Antworten

Zurück zu „Extension Bastelstube“