Laravel 4: come eseguire un SQL raw?

Voglio rinominare un tavolo in Laravel 4, ma non so come farlo.

L’SQL è alter table photos rename to images . Se esiste una soluzione Eloquent, mi piacerebbe anche sapere come eseguire un SQL raw, perché a volte non ci sono alternative.

Nel manuale di Laravel 4 – si parla di comandi grezzi come questo:

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

edit: ho appena trovato questo nella documentazione di Laravel 4 che è probabilmente meglio:

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

Aggiornamento: In Laravel 4.1 (forse 4.0 – Non sono sicuro) – puoi farlo anche per una query Where grezza:

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

Ulteriore aggiornamento Se si sta cercando specificamente di rinominare una tabella, esiste un comando schema per questo – vedere la risposta di Mike sotto per quello.

In realtà, Laravel 4 ha una funzione di ridenominazione della tabella in Illuminate / Database / Schema / Builder.php , al momento non è documentato: Schema::rename($from, $to); .

È anche ansible utilizzare DB::unprepared per le query ALTER TABLE .

DB::unprepared è pensato per essere utilizzato per query come CREATE TRIGGER . Ma essenzialmente esegue direttamente query SQL secondarie. (senza utilizzare istruzioni prepared PDO)

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

Il modo migliore per farlo ho trovato fino ad ora per eseguire il passaggio di Laravel ed eseguire la query direttamente usando l’object Pdo.

Esempio

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

Di solito, trovo più veloce e più efficiente per una query una sola volta aprire semplicemente il mio strumento di query del database e digitare la query con il controllo completo della syntax, quindi eseguirla direttamente.

Ciò diventa essenziale se devi lavorare con le stored procedure o se devi utilizzare qualsiasi funzione di database

Esempio 2 impostazione created_at per il valore che ti serve e lato ripicca qualsiasi funkiness carbonio

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

Ho trovato questo ha funzionato in un controller ma non in una migrazione

Il modo accettato per rinominare una tabella in Laravel 4 è utilizzare il builder Schema. Quindi vorresti fare:

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

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

Se vuoi veramente scrivere una query SQL raw da solo, puoi sempre fare:

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

Nota: la class DB di Laravel supporta anche l’esecuzione di select SQL raw, l’ insert , l’ update e l’ delete query come:

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

Per maggiori informazioni, vedi http://laravel.com/docs/4.2/database#running-queries .

Questo è il mio esempio semplificato di come eseguire RAW SELECT, ottenere risultati e accedere ai valori.

 $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'); } 

Se vuoi eseguire solo script sql senza resutl di ritorno, usa questo

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

Testato in laravel 5.1

Laravel raw sql – Inserisci query:

consente di creare un collegamento get per inserire dati accessibili tramite l’URL. quindi il nostro nome link è ‘insertintodb’ e all’interno di quella funzione usiamo la class db. la class db ci aiuta a interagire con il database. noi inseriamo la funzione statica di class db. All’interno della funzione di inserimento scriveremo la nostra query PDO per inserire dati nel database. nella query sottostante inseriremo “il mio titolo” e “il mio contenuto” come dati nella tabella dei post.

metti sotto il codice nel tuo file web.php all’interno della directory dei percorsi:

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

Ora fai fuoco sopra la query di inserimento dal link del browser qui sotto:

 localhost/yourprojectname/insertintodb 

Puoi vedere l’output della query inserita sopra andando nella tabella del tuo database. Troverai un record con id 1.

Laravel raw sql – Leggi query:

Ora, creiamo un collegamento get per leggere i dati, che è accessibile tramite l’url. quindi il nostro nome link è ‘readfromdb’. noi abbiamo letto la funzione statica della class db. All’interno della funzione di lettura scriveremo la nostra query PDO per leggere i dati dal database. nella query sottostante leggeremo i dati dell’id ‘1’ dalla tabella dei post.

metti sotto il codice nel tuo file web.php all’interno della directory dei percorsi:

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

ora spara sopra leggere la query dal link del browser qui sotto:

 localhost/yourprojectname/readfromdb