2013-07-16 5 views
8

私はクライアントサーバーに直接変更を配備するのではなく、SVNリビジョンのチェンジリストを使ってビルドタールボールを生成してWebチームに送信する必要がある環境で作業しています。laravel 4の移行で生のSQLを取得する

問題は、私は何も気にせず、サイトのアセットと生のクエリだけを変更するということです。つまり、ステージングを変更する必要があるときにクライアントにlaravelの移行を実行するよう要求することはできません&ライブデータベース(とにかくライブには十分なマイグレーションを信頼していません)ライブデータベースに直接アクセスすることはできません。

私は、移行が実行されたときに生のSQLをキャプチャすることができます。そこから変更するものを正確に見ることができ、クライアントに「変更する必要があるSQLファイルがありますあなたがアップデートを適用するときにそれを実行します。

答えて

8

あなたRoutes.phpファイルの先頭にこれを追加する場合 - それはLaravelによって運営されているすべてのSQLをダンプします: - そして、すべてのSQLがダンプされるので、その後、php artisan migrateを実行することを

Event::listen('illuminate.query', function($sql) 
{ 
    var_dump($sql); 
}); 

を行います。いずれのイベントリスナーを設定する必要はありません別の解決策として、可能性は無限大です...

+1

完璧!それはまさに私が探していたものです。 – rich97

+0

+1、素敵な使い方。 – wesside

+0

には、 '?'の代わりに値を見る方法もありますか?ここではlaravel 4.2を使用しています。たとえば、次のようにします: 'select roles。*、assigned_roles.user_id as pivot_user_id、assigned_roles.role_idとしてのpivot_role_idのロールinnerNumber assigned_roles on roles.id = assigned_roles.role_id where assigned_roles.user_id =?;' – Gizmo

11

、することができます - あなたはその後、単にファイルか何かにSQLをログの代わりのvar_dumpを行うことができ

コマンドを実行するときに --pretendオプションを使用します。

php artisan migrate --pretend 

これは、移行によって実行されますSQLクエリをダンプし、実際の移行を実行せずにします。

CreateUsersTable: create table `users` (`id` int unsigned not null auto_increment primary key, `email` varchar(255) not null, `password` varchar(60) not null, `created_at` timestamp default 0 not null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci 
CreateUsersTable: alter table `users` add unique users_email_unique(`email`) 

:これは移行と、クエリのクラス名は、ユニークなemail列でusersテーブルを作成し、移行のためので、あなたがこのような何かを得るでしょう、その移行から各ラインの出力で実行されますこのオプションは、Laravel 4からLaravelの最新バージョンまで提供されています(この回答を投稿している時点では5.1です)。

+0

私はUser :: all()を使用してすべてのユーザーをループしています。 '--pretend'を使っていても、この特定のステートメントをどのように動作させるのですか? '--pretend'モードでは、これはユーザを返しません – Gizmo

関連する問題