2013-07-13 17 views
9

Tôi muốn sử dụng lớp DB của laravel để thực thi truy vấn mysql nhưng không có hàm nào được cung cấp bởi Laravel đang hoạt động.Laravel 4 không thể chạy toàn bộ truy vấn RAW

Không ai trong số đó đang làm việc: DB :: statment()/DB :: select()/DB :: raw()/DB :: update()/DB :: chọn (DB :: raw())

đây là mã tôi muốn truy vấn:

DROP TABLE users; 

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `u_birthday` date NOT NULL DEFAULT '0000-00-00', 
    `u_lastlogin` int(11) NOT NULL, 
    `u_logcout` int(11) NOT NULL DEFAULT '0', 
    `u_level` tinyint(1) NOT NULL DEFAULT '0', 
    `u_language` tinyint(1) NOT NULL DEFAULT '0', 
    `u_status` tinyint(1) NOT NULL DEFAULT '0', 
    `u_gender` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

INSERT INTO users VALUES("1","admin","[email protected]","$2y$08$9sBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0"); 
INSERT INTO users VALUES("2","moderator","[email protected]","$2y$08$15/tIKPM/8gATSzkmey5tuAA/PL4lJeFq7liTETyz0h1dkOotwp3G","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("3","helper","[email protected]","$2y$08$nTtZU9/UBeRLbYJRO/XwCe2D/B57ofx2bCN8vGEiHkqO.bPra0WT6","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("4","dude12","[email protected]","$2y$08$y0JweKtWxJFRF7Ko8q0zkODY.EWEKJ.CR1dDco6aCJh8ssKdzQ6RC","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("5","girl1","[email protected]","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 

tôi đã xem xét và thử các phương pháp từ hai chủ đề quá nhưng không được làm việc:

cannot-run-raw-query-in-laravel-4

laravel-4-how-to-run-a-raw-sql

Lỗi trả về khi thực hiện với "DB :: chọn (DB :: thô ($ query))" hoặc DB :: tuyên bố:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `u_use' at line 3 (SQL: DROP TABLE users; CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `u_birthday` date NOT NULL DEFAULT '0000-00-00', `u_lastlogin` int(11) NOT NULL, `u_logcout` int(11) NOT NULL DEFAULT '0', `u_level` tinyint(1) NOT NULL DEFAULT '0', `u_language` tinyint(1) NOT NULL DEFAULT '0', `u_status` tinyint(1) NOT NULL DEFAULT '0', `u_gender` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO users VALUES("1","admin","[email protected]","$2y$08$9sBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0"); INSERT INTO users VALUES("2","moderator","[email protected]","$2y$08$15/tIKPM/8gATSzkmey5tuAA/PL4lJeFq7liTETyz0h1dkOotwp3G","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("3","helper","[email protected]","$2y$08$nTtZU9/UBeRLbYJRO/XwCe2D/B57ofx2bCN8vGEiHkqO.bPra0WT6","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("4","dude12","[email protected]","$2y$08$y0JweKtWxJFRF7Ko8q0zkODY.EWEKJ.CR1dDco6aCJh8ssKdzQ6RC","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("5","girl1","[email protected]","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0");) (Bindings: array ()) 
+0

bạn có thể hiển thị lỗi khi đưa ra truy vấn trong lớp học DB không? –

+0

đã thêm lỗi được trả lại cho câu hỏi chính. khi tôi thử thực hiện các truy vấn với phpmyadmin, nó hoạt động hoàn hảo –

Trả lời

25

thi SQL Mã giống như một tôi cung cấp trong câu hỏi có thể được thực hiện bằng

DB::unprepared($code); 

Tôi hy vọng điều này sẽ giúp những người có cùng một vấn đề tôi đã có: D

Answer found while looking through laravel issues

+0

@OmerM. Làm thế nào bạn kết hợp lớp DB trong hệ thống của bạn. Bạn đã tạo một Mô hình hoặc được gọi trực tiếp trong bộ điều khiển? – Volatil3

+1

@ Volatil3 Đối với dự án này, tôi đã sử dụng lớp DB trong một lớp lệnh PHP. Tôi muốn tạo một lệnh nghệ nhân mà tôi có thể sử dụng để xuất và nhập db của mình. Bạn có thể sử dụng lớp DB bất cứ nơi nào trong toàn bộ dự án của bạn. Trong bộ điều khiển hoặc mô hình của bạn. –

2

Drop bảng người dùng từ cơ sở dữ liệu sau đó thử này và cho tôi biết liệu nó hoạt động hay không:

DB::insert('CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `u_birthday` date NOT NULL DEFAULT '0000-00-00', 
    `u_lastlogin` int(11) NOT NULL, 
    `u_logcout` int(11) NOT NULL DEFAULT '0', 
    `u_level` tinyint(1) NOT NULL DEFAULT '0', 
    `u_language` tinyint(1) NOT NULL DEFAULT '0', 
    `u_status` tinyint(1) NOT NULL DEFAULT '0', 
    `u_gender` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'); 

//and so on for all the other queries. 
+0

DB :: truy vấn không tồn tại trong laravel 4, vì vậy tôi đã sử dụng DB :: chèn và nó làm việc. Tôi đoán việc thực hiện nhiều truy vấn cùng một lúc là không thể nhưng thực thi từng truy vấn một là làm việc –

+0

có đúng là bạn cần thực hiện truy vấn riêng lẻ và cảm ơn bạn đã nói về truy vấn DB :: không tồn tại trong laravel 4.I sẽ thay đổi câu trả lời như vậy với chèn() –

+1

Chỉ cần phát hiện ra có một chức năng để thực thi mã mysql thô: DB :: không chuẩn bị ($ code); https://github.com/laravel/framework/pull/54 –

2

gì về mã này? Tôi thấy nó khá hữu ích khi sử dụng migrations & db seeding - đặc biệt để triển khai.

Schema::create('users', function($table){ 
    $table->increments('id'); 
    $table->string('u_username'); 
    $table->string('u_email'); 
    $table->string('password'); 
    $table->datetime('u_regdate'); 
    $table->date('u_birthday'); 
    $table->integer('u_lastlogin'); 
    $table->integer('u_logcout')->default(0); 
    $table->tinyinteger('u_level')->default(0); 
    $table->tinyinteger('u_language')->default(0); 
    $table->tinyinteger('u_status')->default(0); 
    $table->tinyinteger('u_gender')->default(0); 
}); 


// Repeat this for other users as well 
User::create([ 
    'u_username' =>  'admin', 
    'u_email' =>  '[email protected]', 
    'password' =>  Hash::make('users-password'), 
    'u_regdate' =>  date('Y-m-d H:i:s'), 
    'u_birthday' =>  '1980-01-01', 
    'u_lastlogin' => 0, 
    'u_logcout' =>  0, 
    'u_level' =>  9, 
    'u_language' =>  0, 
    'u_status' =>  0, 
    'u_gender' =>  0, 
]);