Laavel 경량 프레임 Lumen ORM 및 Migration을 터치해 보십시오.

9379 단어 PHPlumenLaravel
쇠뿔도 단김에 빼라.
느낌은 laavel 경량 프레임 Lumen 시험의 연속이다.
기사를 읽는 것이 귀찮다면 githubgists를 보고 방법을 생각해 보겠습니다.
이번 완성형 코드와 설정 파일을 놓고

종지


Lumen에서 ORM 및 Migration을 사용해 보십시오.

방향성

  • 쓰인 비망록 응용을 목표로 한다.
  • 모드는 id, 바디, 날짜 정도 되나요?
  • DB는 SQLite를 사용합니다.
  • 지난번 복습


    처음부터 프로젝트를 만들고 싶어서 아래 명령을 내린다.
    lumen new memo
    

    DB 디렉토리 만들기


    참조 문서
    If you would like to use database migrations with Lumen, you should run the php artisan make database Artisan command. This command will create a database directory in your project root which contains migrations and seeds directories.
    For further information on how to create database tables and run migrations, check out the Laravel documentation on the schema builder and migrator.php artisan make database에서 DB용 카탈로그를 만들 수 있습니다. 자세한 내용은 Laavel의 문서를 보십시오.
    두드리면 맨 윗층에 데이터베이스 디렉터리를 만들어서 다음과 같은 디렉터리로 구성합니다
    .
    ├── app
    │   ├── Console
    │   ├── Exceptions
    │   ├── Http
    │   ├── Jobs
    │   └── Providers
    ├── artisan
    ├── bootstrap
    │   └── app.php
    ├── composer.json
    ├── composer.lock
    ├── database
    │   ├── migrations
    │   └── seeds
    ├── phpunit.xml
    ├── public
    │   └── index.php
    ├── readme.md
    ├── server.php
    ├── storage
    │   ├── app
    │   ├── framework
    │   └── logs
    
    

    Laavel의 문서 설정 읽기 SQLite


    라벨에서application/config/database.php에서storage/databases폴더에적절한이름의파일을설정하면OK.
    루멘은 어떤 테스트 결과가 될지.
  • DB.env를 통해 설정
  • DB 파일도 마찬가지로 설정
  • 다음은 시행 착오의 결과이다

    .env


    최상위 디렉토리에 .env.example가 있으므로 복사 및 재작성
    APP_ENV=local
    APP_DEBUG=true
    APP_KEY=SomeRandomKey!!!
    
    APP_LOCALE=en
    APP_FALLBACK_LOCALE=en
    
    +DB_CONNECTION=sqlite
    -DB_CONNECTION=mysql
    -DB_HOST=localhost
    -DB_DATABASE=homestead
    -DB_DATABASE=homestead
    -DB_USERNAME=homested
    -DB_PASSWORD=secret
    +#DB_HOST=localhost
    +#DB_DATABASE=homestead
    +#DB_DATABASE=homestead
    +#DB_USERNAME=homested
    +#DB_PASSWORD=secret
    
    CACHE_DRIVER=memcached
    SESSION_DRIVER=memcached
    QUEUE_DRIVER=database
    
    # FILESYSTEM_DRIVER=local
    # FILESYSTEM_CLOUD=s3
    
    # S3_KEY=null
    # S3_SECRET=null
    # S3_REGION=null
    # S3_BUCKET=null
    
    # RACKSPACE_USERNAME=null
    # RACKSPACE_KEY=null
    # RACKSPACE_CONTAINER=null
    # RACKSPACE_REGION=null
    
    
    또?env를 쓸 때 bootstrap/app.php에 적힌 Dotenv::load()의 주석을 빼서 빼주세요.

    DB 파일


    이번에는 storage/database.sqlite 형식으로 설치됐다.tocuh 명령을 사용하면 ok

    결과론으로 삼다


    env 설정이 유효하지 않은 것 같습니다.
    초기 설정
    DB_CONNECTION=sqlite
    DB_DATABASE=memo.sqlite
    
    처음엔 메모였으니까.sqlite라는 파일 이름으로 실행하려고 하였으나, 뒤에 있는 migrate:install 에서는 잘 실행하지 못했습니다. 오류 앞에서 출력을 설정한 후 다음과 같습니다.
    array(4) {
      ["driver"]=>
      string(6) "sqlite"
      ["database"]=>
      string(64) "/path/to/memo/storage/database.sqlite"
      ["prefix"]=>
      string(0) ""
      ["name"]=>
      string(6) "sqlite"
    }
    
    나는 내가 라벨에 대한 지식을 몰라서 그런지, 문서가 누락되었는지, 버그가 생겼는지 모르겠다. 시간이 있을 때 나는 코드를 쫓아다닐 것이다.
    만약 분명히 틀렸다면 누가 나무라세요.

    모드 설정


    라벨 문서를 보면서 마이그레이션 느낌으로 한다.
    우선 마이그레이션을 진행해야 합니다!성명하다.
    php artisan migrate:install
    
    잘 되면 다음 댓글이 있을 거예요.
    Migration table created successfully.
    
    그런 다음 마이그레이션 파일을 실제로 작성합니다.
    명령으로 생성된 파일 설정database/migrations
    php artisan make:migration create_posts_table
    
    생성된migration 파일을 편집합니다.
    up에 이번에 원하는 id, 콘텐츠, 생성 시간의 코드를 기술했습니다.
    down에 표를 삭제하는 코드를 넣으십시오.
    <?php
    
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreatePostsTable extends Migration {
    
            /**
             * Run the migrations.
             *
             * @return void
             */
            public function up()
            {
    +           Schema::create('posts', function(Blueprint $table){
    +                $table->increments('id');
    +                $table->text('body');
    +                $table->timestamps();
    +        });
            }
    
            /**
             * Reverse the migrations.
             *
             * @return void
             */
            public function down()
            {
    +            Schema::drop('posts');
            }
    
    }
    
    그리고 실행하기 전에 편집bootstrap/app.php을 하고 다음 두 줄에 주석을 달아주세요.
    #もしかしたらEloquentはこの段階では不要かもしれませんが
    $app->withFacades();
    $app->withEloquent();
    
    실행
    php artisan migrate
    
    순조로운 말
    Migrated: ~~
    

    ORM 설정


    Eloquent라는 단어를 사용합니다.먼저 파일의 설정부터 시작합니다.
    이번에 app/Http/Models라는 목록을 만들어 그곳에 설치Post.php했다.
    명칭 공간의 성명과 Illuminate\Database\Eloquent\Model를 계승해야 한다.클래스 변수$tables에서 테이블 이름 설정하기
    <?php namespace App\Http\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model {
        protected $table = 'posts';
    }
    

    ORM 활용


    routes.php get을 /posts 에 넣으면, 목록과 로그인 표,post를 일람한 후 로그인 비망록의 내용을 다시 지정하는 형식으로 코드를 바꿉니다
    #先ほど作成したPostを利用するよ
    use App\Http\Models\Post;
    
     $app->get('/', function() use ($app) {
        return $app->welcome();
    });
    
    $app->get('/posts',function() use($app){
        #resoureces/posts/index.blade.phpを参照
        # 変数として、postsに postsテーブルからの全てのデータを代入
        return view('post/index',['posts'=>Post::all()]);
     });
    
    $app->post('/posts',function() use($app){
        # リクエスト内容を登録
        Post::create(Request::all());
        #LaravelのRidirectクラスとは異なり、redirect関数を利用する
        return redirect('/posts');
    });
    
    또한 /posts의 외관을 더욱 가볍게 하다
    다음은 /resources/posts/index.blade.php
    <form action="/posts" method="post">
      <input type="text" name="body" placeholder="メモ欄">
      <input type="submit" value="登録">
    </form>
    <ul>
      <li>メモ一覧</li>
      @foreach ($posts as $post)
        <li>{{$post->body}}</li>
      @endforeach
    </ul>
    
    마지막으로 Post에서 create 방법을 사용할 때 어떤 값을 사용할지 설정합니다
    <?php namespace App\Http\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model {
        protected $table = 'posts';
    +    #保存時の引数のkeyとしてbodyは許可するよ
    +    protected $fillable = array('body');
    }
    
    위와 같이 localhost로 코드를 써 보면 다음과 같은 화면이 될 것 같습니다.

    마지막 설정


    아마 이 보도에 따라 코드를 쓰면 연속적으로post를 할 수 없을 것이다.
    고속 캐시 엔진이memcached를 설정했기 때문에 다시 써야 합니다 .env
    
    -CACHE_DRIVER=memcached
    -SESSION_DRIVER=memcached
    +CACHE_DRIVER=file
    +SESSION_DRIVER=file
    
    
    개작을 통해 연속post를 할 수 있습니다.
    귀찮아서 삭제 같은 건 안 쓰지만 문서를 보면 바로 쓸 수 있어요.

    끝맺다


    라벨에 대한 지식이 없기 때문에 부정확한 점도 있다고 생각해요.
    지적해 주시면 빠른 시일 내에 수정하겠습니다. 잘 부탁드립니다.

    좋은 웹페이지 즐겨찾기