Я хочу перейменувати таблицю в Laravel 4, але не знаю, як це зробити.
SQL є alter table photos rename to images
. Якщо є красномовне рішення, я також хотів би знати, як запустити необроблений SQL, оскільки іноді просто немає альтернативи.
Я хочу перейменувати таблицю в Laravel 4, але не знаю, як це зробити.
SQL є alter table photos rename to images
. Якщо є красномовне рішення, я також хотів би знати, як запустити необроблений SQL, оскільки іноді просто немає альтернативи.
Відповіді:
У посібнику Laravel 4 - мова йде про виконання таких команд:
DB::select(DB::raw('RENAME TABLE photos TO images'));
редагувати: Я щойно знайшов це в документації Laravel 4, що, мабуть, краще:
DB::statement('drop table users');
Оновлення: У Laravel 4.1 (можливо, 4.0 - я не впевнений) - ви також можете зробити це для необробленого запиту Where:
$users = User::whereRaw('age > ? and votes = 100', array(25))->get();
Подальше оновлення Якщо ви спеціально прагнете перейменувати таблицю - для цього існує команда схеми - див. Відповідь Майка нижче.
Schema::rename($from, $to)
, як я вже згадував @ trm42 та @Mike Branski? Будь ласка, подумайте про його зміну, щоб надати іншим глядачам актуальну відповідь.
I'd also like to know how to run a raw SQL
- так що моя відповідь на цю частину. Ви праві, що Schema::rename()
функція корисна для конкретного випадку перейменування таблиці.
На насправді, Laravel 4 має функцію таблиці перейменування в Illuminate / База даних / схеми / Builder.php , це просто без документів на даний момент: Schema::rename($from, $to);
.
Ви також можете використовувати DB::unprepared
для ALTER TABLE
запитів.
DB::unprepared
призначений для використання для таких запитів, як CREATE TRIGGER
. Але по суті він безпосередньо виконує необроблені запити sql. (без використання prepared
операторів PDO )
DB::query("SET foreign_key_checks=0")
;
Найкращий спосіб зробити це, я знайшов до цього часу, щоб відійти від кроку Laravel і виконати запит безпосередньо за допомогою об'єкта Pdo.
Приклад
DB::connection()->getPdo()->exec( $sql );
Зазвичай я вважаю, що для одноразового запиту швидше та ефективніше просто відкрити інструмент запиту бази даних і ввести запит із повною перевіркою синтаксису, а потім виконати його безпосередньо.
Це стає важливим, якщо вам доводиться працювати із збереженими процедурами або вам потрібно використовувати будь-які функції бази даних
Приклад 2 налаштування created_at на значення, яке вам потрібно, і бічне зволоження будь-якої вуглецевої придатності
$sql = 'UPDATE my_table SET updated_at = FROM_UNIXTIME(nonce) WHERE id = ' . strval($this->id);
DB::statement($sql);
Я виявив, що це працює в контролері, але не під час міграції
DB::connection()->getPdo()->exec('USE '.$dbConfig['database']);
. Я скидав і відтворював БД в команді Laravel, і мені потрібно було це зробити.
Загальноприйнятим способом перейменування таблиці в Laravel 4 є використання конструктора схем. Отже, ви хочете зробити:
Schema::rename('photos', 'images');
З http://laravel.com/docs/4.2/schema#creating-and-dropping-tables
Якщо ви дійсно хочете самостійно виписати необроблений SQL-запит, ви завжди можете зробити:
DB::statement('alter table photos rename to images');
Примітка: клас DB Laravel також підтримує запуск сирої SQL select
, insert
, update
і delete
запити, як:
$users = DB::select('select id, name from users');
Для отримання додаткової інформації див. Http://laravel.com/docs/4.2/database#running-queries .
Це мій спрощений приклад того, як запустити RAW SELECT, отримати результат і отримати доступ до значень.
$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');
}
Якщо ви хочете запустити лише скрипт sql без повернення результату, використовуйте це
DB::statement('ALTER TABLE products MODIFY COLUMN physical tinyint(1) AFTER points;');
Випробувано в laravel 5.1
Laravel raw sql - Вставити запит:
дозволяє створити посилання get, щоб вставити дані, доступні через url. тому наше ім’я посилання - „insertintodb“, і всередині цієї функції ми використовуємо клас db. db клас допомагає нам взаємодіяти з базою даних. ми використовуємо статичну функцію класу db. Усередині функції вставки ми напишемо наш запит PDO для вставки даних у базу даних. у нижченаведеному запиті ми вставимо "мій заголовок" та "мій вміст" як дані у таблицю повідомлень.
помістіть нижче код у файл web.php всередині каталогу маршрутів:
Route::get('/insertintodb',function(){
DB::insert('insert into posts(title,content) values (?,?)',['my title','my content']);
});
Тепер запустіть зверху вставте запит за посиланням браузера нижче:
localhost/yourprojectname/insertintodb
Ви можете переглянути вихідний запит на вставку, перейшовши до таблиці бази даних. Ви знайдете запис з ідентифікатором 1.
Laravel raw sql - Прочитайте запит:
Тепер давайте створимо посилання get для читання даних, яке можна отримати за допомогою url. тому наше ім’я посилання - „readfromdb“. ми використовуємо статичну функцію класу db read. Усередині функції читання ми напишемо наш запит PDO для зчитування даних з бази даних. у нижченаведеному запиті ми будемо читати дані ідентифікатора '1' з таблиці повідомлень.
помістіть нижче код у файл web.php всередині каталогу маршрутів:
Route::get('/readfromdb',function() {
$result = DB::select('select * from posts where id = ?', [1]);
var_dump($result);
});
тепер запускаємо зверху запит на читання за посиланням браузера нижче:
localhost/yourprojectname/readfromdb