質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

3626閲覧

FuelPHP db.phpのドライバー名がdefault以外でoil refine migrateする場合の方法

earnest_gay

総合スコア615

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2018/02/27 17:14

編集2018/03/12 15:09

題名の通りです。
一通り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以外があると動かなかったり。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

質問の追記を参照。質問の追記を参照。
default削除したらあかんっぽい。
defaultにdefaulなどがオーバーライドされてるっぽい。
defaultもちゃんとなにかしら設定しとかないとダメっぽい。

投稿2018/02/28 16:29

編集2018/03/12 15:09
earnest_gay

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問