題名の通りです。
一通りmigration実行できるようになるまでが目標です。
まず、ページでDBにアクセスして取得表示はできているようです。
WEB上でのDBアクセスは問題なさそうです。
<?php namespace Web\Controller; use Web\Controller\abstracts\AbstractController; use \Fuel\Core\Response; use \Fuel\Core\Presenter; /** * サンプルを扱うコントローラー。 * * @package web * @extends AbstractController */ class Sample extends AbstractController { /** * WEBページを表示します。 * * @access public * @return Response */ public function action_index($name = null) { // echo "<pre>"; // var_dump(Validation::forge()); // echo "</pre>"; // $Member = new \Provide\Model\App\Member(); // $Member->name = 'goto'; // $Member->save(); $entry = \Provide\Model\App\Member::find_all(); echo "<pre>"; var_dump($entry); echo "</pre>"; $this->template->title = 'サンプル'; $this->template->content = Response::forge(Presenter::forge('sample/index')->set('name', $name)); } }
次に、oilでModelとMigrationを生成します。
おっと、でもこれは調べて解決できました。
MG-MacBook-Pro:model_fuelphp_migration_test MacPRO-N-GOTO$ php oil g model post title:varchar[50] body:text user_id:int Uncaught exception Fuel\Core\PhpErrorException: A non-numeric value encountered Callstack: #0 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/fuel/core/bootstrap.php(103): Fuel\Core\Errorhandler::error_handler(2, 'A non-numeric v...', '/Applications/M...', 1790) #1 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/fuel/packages/oil/classes/generate.php(1790): {closure}(2, 'A non-numeric v...', '/Applications/M...', 1790, Array) #2 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/fuel/packages/oil/classes/generate.php(1177): Oil\Generate::_find_migration_number() #3 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/fuel/packages/oil/classes/generate.php(747): Oil\Generate::migration(Array, false) #4 [internal function]: Oil\Generate::model(Array) #5 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/fuel/packages/oil/classes/command.php(69): call_user_func('Oil\Generate::m...', Array) #6 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_migration_test/oil(68): Oil\Command::init(Array) #7 {main} MG-MacBook-Pro:model_fuelphp_migration_test MacPRO-N-GOTO$ php -v PHP 7.1.13 (cli) (built: Jan 5 2018 15:31:15) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies phpバージョン切り替え MG-MacBook-Pro:model_fuelphp_migration_test MacPRO-N-GOTO$ php -v PHP 7.0.26 (cli) (built: Dec 2 2017 13:12:03) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$ php oil g model post title:varchar[50] body:text user_id:int Creating model: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/classes/model/post.php Creating migration: /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/app/migrations/001_create_posts.php
問題はここからでmigration実行できません。
MG-MacBook-Pro:model_fuelphp_test_migration MacPRO-N-GOTO$ php oil refine migrate Uncaught exception Fuel\Core\Database_Exception: invalid data source name Callstack: #0 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/database/pdo/connection.php(171): Fuel\Core\Database_PDO_Connection->connect() #1 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/database/schema.php(177): Fuel\Core\Database_PDO_Connection->query(1, 'SELECT * FROM `...', false) #2 [internal function]: Fuel\Core\Database_Schema->table_exists('migration') #3 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/database/connection.php(309): call_user_func_array(Array, Array) #4 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/dbutil.php(387): Fuel\Core\Database_Connection->schema('table_exists', Array) #5 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/migrate.php(667): Fuel\Core\DBUtil::table_exists('migration') #6 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/migrate.php(74): Fuel\Core\Migrate::table_version_check() #7 [internal function]: Fuel\Core\Migrate::_init() #8 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/autoloader.php(377): call_user_func('Migrate::_init') #9 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Migrate') #10 [internal function]: Fuel\Core\Autoloader::load('Migrate') #11 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/tasks/migrate.php(283): spl_autoload_call('Migrate') #12 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/tasks/migrate.php(197): Fuel\Tasks\Migrate::_run('default', 'app') #13 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/core/base56.php(37): Fuel\Tasks\Migrate->__call('_run', Array) #14 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/packages/oil/classes/refine.php(108): call_fuel_func_array(Array, Array) #15 [internal function]: Oil\Refine::run('\Fuel\Tasks\Mig...', Array) #16 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/fuel/packages/oil/classes/command.php(126): call_user_func('Oil\Refine::run', 'migrate', Array) #17 /Applications/MAMP/htdocs/Dev/personal/web/model_fuelphp_test_migration/oil(68): Oil\Command::init(Array) #18 {main}
そもそもWEB上でDBアクセスは問題ないのでinvalid data source nameの意味が分からないのですが
development/db.phpはこうなってます。
ローカルなので公開しても問題ないので、、、
<?php /** * The development database settings. These get merged with the global settings. */ return array( // 更新系 'master_apps' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_master_apps', 'username' => 'root', 'password' => 'root', ), ), 'master_logs' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_master_logs', 'username' => 'root', 'password' => 'root', ), ), 'master_users' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_master_users', 'username' => 'root', 'password' => 'root', ), ), // 参照系 'slave_apps' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_slave_apps', 'username' => 'root', 'password' => 'root', ), ), 'slave_logs' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_slave_logs', 'username' => 'root', 'password' => 'root', ), ), 'slave_users' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_slave_users', 'username' => 'root', 'password' => 'root', ), ), );
localhostを127.0.1にしてもダメです。
http://fuelphp.jp/docs/1.7/classes/database/dbutil.html
を参考に
<?php namespace Fuel\Migrations; class Create_posts { public function up() { //これを追加。 \DBUtil::set_connection('master_apps'); \DBUtil::create_table('posts', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true), 'title' => array('constraint' => 50, 'type' => 'varchar'), 'body' => array('type' => 'text'), 'user_id' => array('constraint' => 11, 'type' => 'int'), 'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), 'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), ), array('id')); } public function down() { \DBUtil::drop_table('posts'); } }
でもダメです。
お力お貸しくださいませ。。。
追記。
まだ解決していませんが、とりあえず原因はわかりました。
invalid data source name
やっぱりこれで、oil createしてからまっさらな状態でdb.phpのドライバー名もdefaultのままで中身だけちゃんとアクセスできるようにして
php oil g model post title:varchar[50] body:text user_id:int
でmigrationファイル作って、
php oil refine migrate
したらマイグレーションできた。
で、defaultをtestに変えたら上記エラー文のinvalid data source nameがでた。
default削除してるし、下記の6つにしてるからinvalid data sourceになるわけだ。
master_apps master_logs master_users slave_apps slave_logs slave_users
で、defaultじゃない場合どうやって設定するのかってところでつまづいてまする。
追記。
ジャストヒット。
http://improve-future.com/fuelphp-migration-to-multi-database.html
#タグ
db.phpのドライバー名がdefault以外でoil refine migrateする場合の方法
同じエラーにあってすぐ解決できなかったので具体的に。
return array( // defaultは最初からあるやつ。localhostじゃなくて127.0.0.1にすること。 'default' => array( 'connection' => array( 'dsn' => 'mysql:host=127.0.0.1;dbname=fuel_master_apps', 'username' => 'root', 'password' => 'root', ), ), // defaultからdefaulにした。localhostじゃなくて127.0.0.1にすること。typeとtable_prefixを追加すること。 'defaul' => array( 'type' => 'pdo', 'connection' => array( 'dsn' => 'mysql:host=127.0.0.1;dbname=fuel_master_users', 'username' => 'root', 'password' => 'root', ), 'table_prefix' => '', ), );
typeとtable_prefix以外があると動かなかったり。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。