Kategorien
Doctrine ORM MySQL PHP Symfony2

GET random Object mit Doctrine

Doctrine selbst hat keine ORDER BY rand() Funktion implementiert. Aber es gibt eine Lösung. Man lässt sich den total count der rows ausgeben und nutzt die PHP interne rand() Funktion um FirstResult zu definieren.

    /**
     * @return mixed
     */
    public function getTotal()
    {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('COUNT(p.id)')
            ->from('AppBundle:Product', 'p')
            ->getQuery()
            ->getSingleScalarResult();
    }

    /**
     * @return mixed
     */
    public function getRandom()
    {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('p')
            ->from('AppBundle:Product', 'p')
            ->setFirstResult(rand(0, $this->getTotal()-1))
            ->setMaxResults(1)
            ->getQuery()
            ->getSingleResult();
    }
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
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
MySQL PHP

umkreissuche in mysql mit coordinaten (latitude, longitude)

wenn ihr eine schnelle lösung für eine umkreissuche benötigt, könnt ihr direkt in mysql geocoordinaten + distanzen errechnen.

# :dist = gewünschte entfernung in km (z.b 10)
# :lat = latitude der aktuellen position
# :lon = longitude der aktuellen position

SELECT
    id,
    latitude,
    longitude,
    (
        6371 * acos(
            cos(
                radians( :lat )
            ) * cos(
                radians( latitude )
            ) * cos(
                radians( longitude ) - radians( :lon )
            ) + sin(
                radians( :lat )
            ) * sin(
                radians( latitude )
            )
        )
    ) AS distance

FROM
    points_with_geocoordinates

HAVING
    distance <= :dist

ORDER BY
    distance ASC
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
Debugging Linux MySQL PHP PhpMyAdmin Server

phpmyadmin mit ssl erzwingen

trage einfach in die config.inc.php folgendes ans ende der datei:

// am ende der config.inc.php
$cfg['ForceSSL'] = true;
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