web-dev-qa-db-fra.com

Laravel 4: comment exécuter un SQL brut?

Je veux renommer une table dans Laravel 4, mais je ne sais pas comment faire cela.

Le SQL est alter table photos rename to images. S'il existe une solution Eloquent, j'aimerais également savoir comment exécuter un SQL brut, car il n'y a parfois aucune alternative.

70
duality_

Dans le manuel de Laravel 4 - il est question de commandes brutes comme celles-ci:

DB::select(DB::raw('RENAME TABLE photos TO images'));

edit: Je viens de le trouver dans le documentation de Laravel 4 qui est probablement meilleur:

DB::statement('drop table users');

Mise à jour: Dans Laravel 4.1 (peut-être 4.0 - je ne suis pas sûr)) - vous pouvez également le faire pour un raw Où requête:

$users = User::whereRaw('age > ? and votes = 100', array(25))->get();

Autres mises à jour Si vous souhaitez spécifiquement renommer un tableau - il existe une commande de schéma pour cela - voir la réponse de Mike ci-dessous à ce sujet.

139
Laurence

En fait, Laravel 4 a une fonction de changement de nom de table dans Illuminate/Database/Schema/Builder.php , il n’est simplement pas documenté pour le moment: Schema::rename($from, $to);.

16
Mike Branski

Vous pouvez aussi utiliser DB::unprepared pour ALTER TABLE questions.

DB::unprepared est destiné à être utilisé pour des requêtes telles que CREATE TRIGGER. Mais essentiellement, il exécute les requêtes SQL brutes directement. (sans utiliser les instructions PDO prepared)

https://github.com/laravel/framework/pull/54

15
smitrp

La meilleure façon de faire cela que j’ai trouvé jusqu’à présent consiste à contourner l’étape Laravel et à exécuter la requête directement à l’aide de l’objet Pdo.

Exemple

DB::connection()->getPdo()->exec( $sql );

Je trouve généralement plus rapide et plus efficace, pour une requête unique, simplement d’ouvrir mon outil de requête de base de données et de saisir la requête avec vérification de la syntaxe complète puis de l’exécuter directement.

Cela devient essentiel si vous devez travailler avec des procédures stockées ou si vous devez utiliser des fonctions de base de données.

Exemple 2 définissez created_at sur la valeur que vous souhaitez et sur le côté trempant toute folie carbone

$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id);
DB::statement($sql);

J'ai trouvé que cela fonctionnait dans un contrôleur mais pas dans une migration

10
Abelgo

La méthode acceptée pour renommer une table dans Laravel 4 consiste à utiliser le générateur de schéma. Ainsi, vous voudrez procéder comme suit:

Schema::rename('photos', 'images');

De http://laravel.com/docs/4.2/schema#creating-and-dropping-tables

Si vous voulez vraiment écrire une requête SQL brute vous-même, vous pouvez toujours faire:

DB::statement('alter table photos rename to images');

Remarque: La classe de base de données de Laravel prend également en charge l’exécution de requêtes SQL select, insert, update et delete brutes, telles que:

$users = DB::select('select id, name from users');

Pour plus d'informations, voir http://laravel.com/docs/4.2/database#running-queries .

7
Sean the Bean

Voici mon exemple simplifié de la manière d’exécuter RAW SELECT, d’obtenir un résultat et d’accéder aux valeurs.

$res = DB::select('
        select count(id) as c
        from prices p 
        where p.type in (2,3)
    ');
    if ($res[0]->c > 10)
    {
        throw new Exception('WOW');
    }

Si vous voulez seulement exécuter le script SQL sans retour, utilisez cette commande.

DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');

Testé dans laravel 5.1

2
Yevgeniy Afanasyev