windows7(64bit)にRuby on Rails + mysql環境[追加]
やっぱりだめだった。64bitだと"rails g"や"rails s"でコケる。
mingw-w64-install.exeを落としてきてインストール
gendef.exe libmysql.dll dlltool -v --dllname libmysql.dll --def libmysql.def --output-lib libmysql.lib copy libmysql.dll C:\Ruby200-x64\bin copy libmysql.lib C:\Ruby200-x64\bin
gem mysql2 をやり直し
gem uninstall mysql2 gem install mysql2 ...
次にこのエラー
`rescue in create_default_data_source': No source of timezone data could be found. (TZInfo::DataSourceNotFound) Please refer to http://tzinfo.github.io/datasourcenotfound for help resolving this error.
んで、
gem install tzinfo-data
Gemfileの以下のように64bit用に書き換え
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
イケた~
windows7(64bit)にRuby on Rails + mysql環境
ハマった。。
どうしてもコケる。
gem install mysql2 ・・・ checking for main() in -llibmysql... no ・・・
http://dev.mysql.com/downloads/connector/c/
- ダウンロードして解凍かインストールしたディレクトリ/libにある
libmysql.dllをRuby/binにコピー
- 再度実行
gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\o pt\Ruby200-x64\mysql-connector-c-6.1.3-winx64"'
やっと通った。。
【Laravel】Vol.5 日本ロケール
これからDBの登録・更新には、updated_at,created_atに自動的にシステム時刻をセットしたり
バリデーションによる標準メッセージを使用しますが、
設定を日本時刻(JST)、メッセージを日本語に設定しておく必要があります。
■en -> ja
application/config/application.php
'language' => 'ja', ・・・ 'timezone' => 'Asia/Tokyo',
■name属性値に応じた日本語名称の追加
application/language/ja/validation.php
'attributes' => array( 'name' => '名称' ),
【Laravel】Vol.4 データベースからSELECT
Fluentクエリービルダーでは結合したSQLの結果で
同名の列が上書きされネストした構造での取得ができませんでした。
そこで、Eloquent ORMを使って結合したデータを取得していきます
基底になる業務テーブルをestimates、マスタをusersテーブルとして
取得します。
application/models/users.php
<?php class Users extends Eloquent { } ?>
規則に従ってたテーブル名、idとしているので特にフィールドは設けていません。
ルールはテーブル名=クラス名と、Eloquentをextendsすることです。
次に業務テーブルのモデルを作成し、Usersテーブルとの結合を表します。
ここでもルールに従い、Usersとの結合列をuser_idと命名規則に従ってテーブルを作成しています。
application/models/estimates.php
<?php class Estimates extends Eloquent { // 結合(belongs) public function user() { return $this->belongs_to('Users'); } } ?>
これで、モデルの準備は完了です。次にコントローラーから結合してデータを取得してみます。
$list = Estimates::with(array('user')) ->order_by('seq_no', 'desc') ->get(); // estimatesテーブルのid列 var_dump($list[0]->id); // usersテーブルのid列 var_dump($list[0]->user->id);
結合して取得したいテーブルをwithメソッドに指定し、チェインして順序の指定をして
getメソッド取り出しています。
【Laravel】Vol.3 データベース
データベースと連携です
今回はXamppのMySQLと連携していきます
まずデータベースを作成して、以下のテーブルを作成しました
CREATE TABLE `users` ( `id` int(10) NOT NULL auto_increment, `name` varchar(10) NOT NULL, `passwd` varchar(10) NOT NULL, `desc` varchar(50) default NULL comment '説明', `auth` int(10) default NULL comment '権限', `delete_flg` int(1) default 0 comment '1:deleted', `updated_at` timestamp default 0, `created_at` timestamp default current_timestamp(), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
データベースとの接続設定を行います
以下の情報を環境に合わせて書き換えます
[laravel]/application/config/database.php
'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'prefix' => '', ),
さっそくコントローラからデータベースにアクセスしてみます
アクセスの方法は大きく3つあります
- クエリー(生のSQL)
SQLを書きます
- Fluentクエリービルダー
テーブルやカラムを文字列として指定できる柔軟なアクセス
- Eloquent ORM
テーブルとModelをマッピングしてオブジェクト操作
まずは、クエリーによるアクセスをしてみます
テーブルも空ですので、INSERTとSELECTをやってみます
user.php
<?php Class User_Controller extends Base_Controller{ public function action_index() { $binds = array('テスト', 'pass'); $success = DB::query('insert into users (name,passwd) values (?, ?)', $binds); $users = DB::query('select * from users'); echo var_dump($users); } } ?>
ブラウザからアクセスするとINSERTされたレコードがSELECTされて表示されます
array(1) { [0]=> object(stdClass)#31 (8) { ["id"]=> int(1) ["name"]=> string(9) "テスト" ["passwd"]=> string(4) "pass" ["desc"]=> NULL ["auth"]=> NULL ["delete_flg"]=> int(0) ["updated_at"]=> string(19) "0000-00-00 00:00:00" ["created_at"]=> string(19) "2013-05-24 17:08:57" } }
selectやinsertのSQLを発行するためにDB:query()メソッドを使用しました
この他にも結果の先頭レコードのみを取得する DB:first() メソッドや
カラムをひとつ指定して取り出す DB:only()メソッド があります
$user = DB::first('select * from users where id = 1'); $email = DB::only('select email from users where id = 1'); 「表示結果」 object(stdClass)#31 (8) { ["id"]=> int(1) ["name"]=> string(9) "テスト" ["passwd"]=> string(4) "pass" ["desc"]=> NULL ["auth"]=> NULL ["delete_flg"]=> int(0) ["updated_at"]=> string(19) "0000-00-00 00:00:00" ["created_at"]=> string(19) "2013-05-24 17:08:57" } string(9) "テスト"