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