Kategorien
Debugging Doctrine ORM Frameworks MySQL Symfony2

SQL General error – 1553 Cannot drop index XYZ needed in a foreign key constraint

// show indexes of table
SHOW CREATE TABLE news;

// shows something like this
...
CONSTRAINT `FK_3A51546D12469DE2` FOREIGN KEY (`category_id`) REFERENCES `news_category` (`id`),
...

// drop index
ALTER TABLE news DROP FOREIGN KEY FK_3A51546D12469DE2;
Kategorien
Doctrine ORM Frameworks MySQL PHP Symfony2

Symfony2 Doctrine Table Join ohne Relation

Wer in Doctrine Tabellen joinen möchte ohne das diese durch Entity Relationen definiert sind, kann folgendermaßen vorgehen:


    public function getInvoicesNotInElster()
    {
        $query = $this->em->createQueryBuilder()
            ->select('i')
            ->from('AcmeAppBundle:Invoice', 'i')
            ->leftJoin('AcmeAppBundle:Elster', 'e', 'WITH', 'e.number = i.number_origin')
            ->where('i.cancelled = 0')
            ->andWhere('e.number IS NULL')
            ->getQuery();

        return $query->getResult();
    }

Kategorien
Deployment Linux MySQL Shell

definer mit sed aus mysql dump entfernen

um aus bestehenden mysqldumps die user@host definer zu entfernen kann man folgendes tun

~ $ sed -r -e "s/\/\*[^\/]*DEFINER.*\*\///g" < mysqldump.sql > mysqldump-exdefiner.sql
Kategorien
Deployment Linux MySQL Server Shell

mysqldump ohne definer

um hostunabhängige mysql dumps zu erzeugen, muss man die definer aus dem jeweiligen dump entfernen.
mit sed kann man das gleich beim erzeugen des dumps:

mysqldump database -ufoo -pbar -hlocalhost | sed "s/\/\*[^\/]*DEFINER.*\*\///g" > dump_without_definer.sql
Kategorien
MySQL PHP Propel ORM

der Criteria Builder für Propel ORM Criterias

propel_criteria_builder

Die Propel ORM für PHP bedient sich einer eigenen Syntax (Criterias) um Queries zusammenzustellen.

Hier gibt es einen Criteria Builder, den man mit Standard SQL füttern kann.

Der Criteria Builder konvertiert sodann das eingegebene SQL Statement in ein Propel Criteria.

So wird aus diesem kleinen SQL Statement:


SELECT user.*
FROM user
WHERE user.state = 100 
AND (user.name = 'user' OR user.email = 'user@domain.tld')

diese Propel Criteria:


$c = new Criteria();
$crit0 = $c->getNewCriterion(UserPeer::STATE, 100);
$crit1 = $c->getNewCriterion(UserPeer::NAME, 'user');
$crit2 = $c->getNewCriterion(UserPeer::EMAIL, 'user@domain.tld');

// Perform OR at level 1 ($crit1 $crit2 )
$crit1->addOr($crit2);

// Perform AND at level 0 ($crit0 $crit1 )
$crit0->addAnd($crit1);

// Remember to change the peer class here for the correct one in your model
$c->add($crit0);
$result = TablePeer::doSelect($c);

// This loop will of course need to be edited to work
foreach ($result as $obj)
{
	//$val = $obj->getValue();
}

Einen Versuch ist es Wert.

Hier gehts zum Propel ORM Criteria Builder