82 votes

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.

151voto

The Shift Exchange Points 23103

Dans le Laravel 4 manuel de l' - il parle de faire les premières commandes comme ceci:

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

Il y a aussi quelques commandes pour faire des modifications de Schéma (comme on le voit ici) - mais le changement de nom d'une table n'est pas l'un d'eux.

p.s. vous pouvez également faire la commande suivante qui fonctionne - et fait probablement plus de "sens" pour les gens de la lecture de votre code

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

edit: je viens de trouver ceci dans le Laravel 4 de la documentation qui est probablement mieux:

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();

15voto

Mike Branski Points 507

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

15voto

smitrp Points 564

Vous pouvez également utiliser DB::unprepared pour les requêtes ALTER TABLE .

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 déclarations PDO prepared )

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

10voto

Abelgo Points 21

La meilleure façon de faire ce que j'ai trouvé jusqu'à présent à côté de l'étape Laravel et l'exécution de la requête directement à l'aide de l'objet Pdo.

Exemple

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

J'ai l'habitude de trouver plus rapidement et plus efficace pour une requête pour simplement ouvrir ma requête de base de données de l'outil et le type de la requête avec le plein contrôle de la syntaxe puis l'exécuter directement.

Cela devient essentiel si vous avez à travailler avec des procédures stockées ou besoin d'utiliser toutes les fonctions de base de données

Exemple 2 réglage created_at à la valeur que vous avez besoin pour être et à côté de trempage de carbone funkiness

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

J'ai trouvé cette travaillé dans un contrôleur, mais pas dans une migration

8voto

Sean the Bean Points 819

La façon de le faire dans Laravel 4 est pour le générateur de Schéma. Si vous voulez faire:

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

À partir de http://laravel.com/docs/4.2/schema#creating-and-dropping-tables

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

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

Remarque: Laravel de la classe DB prend également en charge l'exécution de SQL brut select, insert, update, et delete des requêtes, comme:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X