T.Sugiyama Official Blog

興味のあることを書いています。

Laravel超初級でつまづいたこと【解決済み】

PHPフレームワークの一つであるLaravelと、ユーザーインターフェイスを構築するためのプログレッシブフレームワークであるVue.jsを勉強しようと思い、こちらのブログを参考にさせて頂き、自分でもやってみました。↓↓↓

Laravelとvueの連携!データベース内の一覧を表示する方法 – console dot log

Laravelのマイグレーションを使ってお笑い芸人のコンビ名のデータベースを作成し、Vue.js で表示さよう!というものです。至ってシンプル!

 

ということで、早速やってみたのですがーー。

 

すぐつまづくんですよね。その辺の道で言うと、ほんのちょっとした段差やのに...。ゆっくりと、しっかりと足上げて歩いてるつもりなのになんでつまづくねん!と、自分の知識不足、力不足に辟易しながら、もう同じところでつまづかないようにここに書いて、段差を取り除いておこうと思います。

 

何につまづいたか?

 まずつまずいたのは、テストデータを作った後のマイグレーションの実行です。(その前にmysqlにデータベースを作っていなくてエラーが出たのは、ここでは割愛。)

php artisan migrate

 このコマンドでテーブルができるはずなのですが...

テーブルが作成されなかったのです!

よくよく見てみると...


[vagrant@toshikisugiyama laravel_vue]$ cat database/migrations/2018_12_10_010547_create_comedians_table.php
<?php 

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateComediansTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comedians', function (Blueprint $table) {
            $table-&gt;increments('id');
            $table-&gt;increments('name');
            $table-&gt;timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('comedians');
    }
}

追加した名前フィールドがstringではなくincrementsになってる...。

stringにして再度php artisan migrate


[vagrant@toshikisugiyama laravel_vue]$ php artisan migrate;
Migrating: 2018_12_10_010547_create_comedians_table
Migrated:  2018_12_10_010547_create_comedians_table
[vagrant@toshikisugiyama laravel_vue]$

いけました。


mysql> show tables;
+--------------------------+
| Tables_in_laravel_vue_db |
+--------------------------+
| comedians                |
| migrations               |
+--------------------------+
2 rows in set (0.00 sec)
mysql> desc comedians;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql>

データも入っています!

 

しかしそれだけでは終わらなかった。

次はphp artisan db:seedです。


[vagrant@toshikisugiyama laravel_vue]$ php artisan db:seed
Seeding: ComediansTableSeeder

   ReflectionException  : Class ComediansTableSeeder does not exist

  at /home/vagrant/laravel_vue_lesson/laravel_vue/vendor/laravel/framework/src/Illuminate/Container/Container.php:779
    775|         if ($concrete instanceof Closure) {
    776|             return $concrete($this, $this->getLastParameterOverride());
    777|         }
    778|
  > 779|         $reflector = new ReflectionClass($concrete);
    780|
    781|         // If the type is not instantiable, the developer is attempting to resolve
    782|         // an abstract type such as an Interface of Abstract Class and there is
    783|         // no binding registered for the abstractions so we need to bail out.

  Exception trace:

  1   ReflectionClass::__construct("ComediansTableSeeder")
      /home/vagrant/laravel_vue_lesson/laravel_vue/vendor/laravel/framework/src/Illuminate/Container/Container.php:779

  2   Illuminate\Container\Container::build("ComediansTableSeeder")
      /home/vagrant/laravel_vue_lesson/laravel_vue/vendor/laravel/framework/src/Illuminate/Container/Container.php:658

  Please use the argument -v to see more details.

こうですね。

ComediansTableSeederクラスが無いようです。でも、作ってるんです。

調べると、どうやらcomposer dump-autoloadするといいようです。


[vagrant@toshikisugiyama laravel_vue]$ composer dump-autoload
-bash: composer: コマンドが見つかりません

でもcomposerコマンドが見つからない!


[vagrant@toshikisugiyama laravel_vue]$ php composer.phar
Could not open input file: composer.phar
[vagrant@toshikisugiyama laravel_vue]$ which composer
/usr/bin/which: no composer in (/home/vagrant/.pyenv/plugins/pyenv-virtualenv/shims:/home/vagrant/.pyenv/shims:/home/vagrant/.pyenv/bin:/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:/home/vagrant/.nodebrew/current/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin)
[vagrant@toshikisugiyama laravel_vue]$ echo $PATH
/home/vagrant/.pyenv/plugins/pyenv-virtualenv/shims:/home/vagrant/.pyenv/shims:/home/vagrant/.pyenv/bin:/home/vagrant/.rbenv/shims:/home/vagrant/.rbenv/bin:/home/vagrant/.nodebrew/current/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin

パスが通ってないのか?


[vagrant@toshikisugiyama laravel_vue]$ ls /usr/local/bin/composer
composer.phar

解決方法は↓これでした。

composer: command not found と Could not open input file :/usr/local/bin/composer.phar からの対処 - Qiita


[vagrant@toshikisugiyama laravel_vue]$ alias composer="php /usr/local/bin/composer/composer.phar"

再度、


[vagrant@toshikisugiyama laravel_vue]$ composer dump-autoload
Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 3743 classes

そして、


[vagrant@toshikisugiyama laravel_vue]$ php artisan db:seed
Seeding: ComediansTableSeeder
Database seeding completed successfully.

たどり着きました!


mysql> select * from comedians;
+----+-----------------------------------+---------------------+---------------------+
| id | name                              | created_at          | updated_at          |
+----+-----------------------------------+---------------------+---------------------+
|  1 | ビートたけし                      | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  2 | タモリ                            | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  3 | 明石家さんま                      | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  4 | ダウンタウン                      | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  5 | とんねるず                        | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  6 | ウッチャンナンチャン              | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  7 | 爆笑問題                          | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  8 | ナインティナイン                  | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
|  9 | ロンドンブーツ1号2号            | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
| 10 | キングコング                      | 2018-12-10 02:35:37 | 2018-12-10 02:35:37 |
+----+-----------------------------------+---------------------+---------------------+
10 rows in set (0.00 sec)

データも入ってます!

その後、php artisan serve --host=192.168.33.10 --port=8000 のところや、「viewが見つかりません」のエラーを乗り越え、

無事、

お笑い芸人のコンビ名リストができました!

お笑い芸人のコンビ名リストができました!

できました!

今回使ったのは、Laravel、Vue.js、bootstrap です。