Laravel 4: Comment exécuter un SQL brut?

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

le SQL est alter table photos rename to images . S'il y a une solution éloquente, j'aimerais aussi savoir comment exécuter un SQL brut, parce que parfois il n'y a pas d'alternative.

68
demandé sur BenjaminRH 2013-02-04 17:40:49

7 réponses

dans le manuel Laravel 4 - il parle de faire des commandes brutes comme ceci:

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

edit: j'ai juste trouvé ça dans les Laravel 4 documentation qui est probablement la meilleure:

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

mise à jour supplémentaire si vous cherchez spécifiquement à faire un renommage de table - il y a une commande de schéma pour cela - voir la réponse de Mike ci-dessous pour cela.

133
répondu Laurence 2016-12-01 00:06:35

en fait, Laravel 4 a une fonction de renommage de table dans Illuminate/Database/Schema/Builder.php , c'est juste non documenté pour le moment: Schema::rename($from, $to); .

16
répondu Mike Branski 2013-03-08 21:23:09

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

DB::unprepared est destiné à être utilisé pour des requêtes comme CREATE TRIGGER . Mais il exécute essentiellement des requêtes SQL brutes directement. (sans utiliser les énoncés prepared de L'AOP)

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

15
répondu smitrp 2013-07-26 08:46:07

la meilleure façon de faire cela, je l'ai trouvé jusqu'à présent à côté de Laravel step et exécuter la requête directement en utilisant l'objet AOP.

exemple

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

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

cela devient essentiel si vous devez travailler avec stocké procédures ou besoin d'utiliser toute fonction de base de données

exemple 2 définir created_at à a la valeur que vous avez besoin qu'il soit et steeping tout funkiness de 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
répondu Abelgo 2014-05-23 15:45:31

la méthode acceptée pour renommer une table dans Laravel 4 est d'utiliser le constructeur de schéma. Donc vous voudriez faire:

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

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

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

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

Note: La classe DB de Laravel supporte également l'exécution de SQL select , insert , update , et delete requêtes, comme:

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

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

7
répondu Sean the Bean 2016-01-13 00:08:22

ceci est mon exemple simplifié de la façon d'exécuter RAW SELECT, obtenir le résultat et 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 exécuter seulement le script sql sans résultat de retour utilisez ce

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

testé dans laravel 5.1

2
répondu Yevgeniy Afanasyev 2016-01-12 23:14:28

Laravel sql brut – requête d'Insertion:

permet de créer un lien get pour insérer des données qui est accessible par url . donc notre nom de lien est ' insertintodb’ et à l'intérieur de cette fonction nous utilisons la classe db . db classe nous aide à interagir avec la base de données . nous us db Classe fonction statique insert . À l'intérieur de la fonction insert, nous écrirons notre requête PDO pour insérer des données dans la base de données . dans la requête ci-dessous, nous allons insérer ‘ mon titre ‘ et ‘mon contenu ' comme données dans le tableau des postes .

mettez le code ci-dessous dans votre web.fichier php dans le répertoire des routes:

Route::get('/insertintodb',function(){
DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']);
});

maintenant feu au-dessus insérer requête à partir du lien de navigateur ci-dessous:

localhost/yourprojectname/insertintodb

vous pouvez voir la sortie de la requête insert ci-dessus en allant dans votre table de base de données .vous trouverez un enregistrement avec id 1 .

Laravel sql brut – requête en Lecture :

maintenant, permet créer un lien get pour lire les données, qui est accessible par url . donc notre nom de lien est 'readfromdb'. nous lisons la fonction statique de la classe db . À l'intérieur de la fonction Lire nous écrirons notre requête AOP pour lire les données de la base de données . dans la requête ci-dessous nous lirons les données de l'id ‘1’ de la table des postes .

mettez le code ci-dessous dans votre web.fichier php dans le répertoire des routes:

Route::get('/readfromdb',function() {
    $result =  DB::select('select * from posts where id = ?', [1]);
    var_dump($result);
});

maintenant feu au-dessus lire requête à partir du lien de navigateur ci-dessous:

localhost/yourprojectname/readfromdb
-1
répondu sobhagya sahu 2017-06-21 04:12:51