LaavelEloquent Collection을 확장해 보십시오.
얻은 데이터는 각양각색의 가공을 할 수 있어 매우 편리하다.
하지만 원하는 형태의 데이터로 도저히 변환할 수 없기 때문에 추가로 변환해 돌아오는 방법을 시도해 봤다.
이 확장은 서비스 제공자를 등록할 필요가 없기 때문에 매우 간단하다.
대상 버전(작업 확인 완료)은 5.1입니다.
DB는 Postgresql9입니다.4.4 사용했습니다.
추가 방법 클래스 준비
Illuminate\Database\Eloquent\Collection 을 계승할 클래스를 준비합니다.
추가 방법에 대해서는 잠시 후에 설명하겠습니다.
이런 느낌으로 준비해 봤어요.
app/KantaiCollection.php<?php namespace App\KantaiCollection;
use Illuminate\Database\Eloquent\Collection;
class KantaiCollection extends Collection
{
}
솔직히 나 이거 하고 싶었어.추우신 분들은 브라우저를 제자리에 놓으세요!
...그러나 사실상 전혀 무관한 이슈는 아니어서 함정 사용 여부는 불분명하지만, DMM이 운영하는 게임 중에는 라벨5를 도입하는 것도 있다.
DMM 게임의 로그 해석 ~ 로그 수집 및 해석 개요 ~
http://labotech.dmm.com/entry/2015/08/20/184051
추가 방법에 대한 설명
비록 약간 오프라인 상태이지만, 나는 그래도 돌아가서 설명해야겠다.
내가 원하는 데이터 형식은 지정한 열을 키로 하는 연상 배열이다.
순환 처리 시 isset에서 존재를 확인하고 성능을 높일 수 있기 때문이다.
또 연상 배열의 성질을 이용해 SQL에서 디스틴act를 사용하지 않아도 중복을 생략한 일람표를 얻을 수 있다.
(나는 아직 어떤 공연이 좋은지 조사하지 못했다)
그래서 이렇게 실시해 보았다.
app/KantaiCollection.php<?php namespace App\KantaiCollection;
use Illuminate\Database\Eloquent\Collection;
class KantaiCollection extends Collection
{
/**
* 指定したカラムをキーにHash化
*
* @param string $column
* @return array
*/
public function toHash($column)
{
$result = [];
foreach ($this->items as $item)
{
$result[$item[$column]] = $item;
}
return $result;
}
}
간단한 설명 처리 후
items에는 가져올 때의 그룹과 대상이 포함되어 있습니다.
따라서 이 순환을 한 다음 지정한 열을 키로 다시 배열합니다.
Eloquent Model의 new Collection을 다시 작성합니다.
Eloquent Model을 준비하고 new Collection()을 다시 쓰는 방법입니다.
app/Kantai.php<?php namespace App\Kantai;
use Illuminate\Database\Eloquent\Model;
use App\KantaiCollection;
class Kantai extends Model
{
/**
* コレクションの拡張
*
* @param array $models
* @return \App\KantaiCollection
*/
public function newCollection(array $models = [])
{
return new KantaiCollection($models);
}
}
이렇게 되면 아까의 방법을 사용할 수 있을 거야!
참고로 문서에도 기재되어 있어서 많은 사람들이 알고 있을 것이다
artisan 명령을 사용하여 모형을 제작할 때 - m 옵션을 추가하면 이동도 동시에 생성되어 매우 편리합니다.
(seeder를 같이 만들 수 있는 옵션이 있으면 더 편해요)
데이터 준비해서 확인할게요.
Kantais 테이블의 데이터를 준비합니다.
함종과 이름의 간단한 데이터일 뿐, 그 안에는 이런 느낌이 든다.
Kantais id | type | name | created_at | updated_at
----+----------+------+---------------------+---------------------
1 | 駆逐艦 | 吹雪 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
2 | 駆逐艦 | 睦月 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
3 | 軽巡洋艦 | 川内 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
4 | 軽巡洋艦 | 神通 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
5 | 重巡洋艦 | 愛宕 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
6 | 重巡洋艦 | 利根 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
7 | 戦艦 | 長門 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
8 | 戦艦 | 金剛 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
9 | 空母 | 赤城 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
10 | 空母 | 加賀 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
그러면 모든 기록을 얻고name을 키로 하는 연상 배열을 얻습니다.
방법의 사용법은 이런 느낌이다.
app/Http/Controllers/KanColleController.php<?php
namespace App\Http\Controllers\KanColle;
use App\Http\Controllers\Controller;
class KanColleController extends Controller
{
public function index()
{
$kantai = app('App\Kantai');
dd($kantai->all()->toHash('name'));
}
}
실행하다
문제없이 얻었다.
그나저나 아까 방법은 all()밖에 없었는데 소장으로 반납하면...
물론 콜렉션 대상의 이름은'KantaiCollection'이다.
그래서 이번이 두 번째야. 그냥 이거 하고 싶을 뿐이야
이상, 교제해 주셔서 감사합니다.
총결산
<?php namespace App\KantaiCollection;
use Illuminate\Database\Eloquent\Collection;
class KantaiCollection extends Collection
{
}
비록 약간 오프라인 상태이지만, 나는 그래도 돌아가서 설명해야겠다.
내가 원하는 데이터 형식은 지정한 열을 키로 하는 연상 배열이다.
순환 처리 시 isset에서 존재를 확인하고 성능을 높일 수 있기 때문이다.
또 연상 배열의 성질을 이용해 SQL에서 디스틴act를 사용하지 않아도 중복을 생략한 일람표를 얻을 수 있다.
(나는 아직 어떤 공연이 좋은지 조사하지 못했다)
그래서 이렇게 실시해 보았다.
app/KantaiCollection.php
<?php namespace App\KantaiCollection;
use Illuminate\Database\Eloquent\Collection;
class KantaiCollection extends Collection
{
/**
* 指定したカラムをキーにHash化
*
* @param string $column
* @return array
*/
public function toHash($column)
{
$result = [];
foreach ($this->items as $item)
{
$result[$item[$column]] = $item;
}
return $result;
}
}
간단한 설명 처리 후items에는 가져올 때의 그룹과 대상이 포함되어 있습니다.
따라서 이 순환을 한 다음 지정한 열을 키로 다시 배열합니다.
Eloquent Model의 new Collection을 다시 작성합니다.
Eloquent Model을 준비하고 new Collection()을 다시 쓰는 방법입니다.
app/Kantai.php<?php namespace App\Kantai;
use Illuminate\Database\Eloquent\Model;
use App\KantaiCollection;
class Kantai extends Model
{
/**
* コレクションの拡張
*
* @param array $models
* @return \App\KantaiCollection
*/
public function newCollection(array $models = [])
{
return new KantaiCollection($models);
}
}
이렇게 되면 아까의 방법을 사용할 수 있을 거야!
참고로 문서에도 기재되어 있어서 많은 사람들이 알고 있을 것이다
artisan 명령을 사용하여 모형을 제작할 때 - m 옵션을 추가하면 이동도 동시에 생성되어 매우 편리합니다.
(seeder를 같이 만들 수 있는 옵션이 있으면 더 편해요)
데이터 준비해서 확인할게요.
Kantais 테이블의 데이터를 준비합니다.
함종과 이름의 간단한 데이터일 뿐, 그 안에는 이런 느낌이 든다.
Kantais id | type | name | created_at | updated_at
----+----------+------+---------------------+---------------------
1 | 駆逐艦 | 吹雪 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
2 | 駆逐艦 | 睦月 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
3 | 軽巡洋艦 | 川内 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
4 | 軽巡洋艦 | 神通 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
5 | 重巡洋艦 | 愛宕 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
6 | 重巡洋艦 | 利根 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
7 | 戦艦 | 長門 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
8 | 戦艦 | 金剛 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
9 | 空母 | 赤城 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
10 | 空母 | 加賀 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
그러면 모든 기록을 얻고name을 키로 하는 연상 배열을 얻습니다.
방법의 사용법은 이런 느낌이다.
app/Http/Controllers/KanColleController.php<?php
namespace App\Http\Controllers\KanColle;
use App\Http\Controllers\Controller;
class KanColleController extends Controller
{
public function index()
{
$kantai = app('App\Kantai');
dd($kantai->all()->toHash('name'));
}
}
실행하다
문제없이 얻었다.
그나저나 아까 방법은 all()밖에 없었는데 소장으로 반납하면...
물론 콜렉션 대상의 이름은'KantaiCollection'이다.
그래서 이번이 두 번째야. 그냥 이거 하고 싶을 뿐이야
이상, 교제해 주셔서 감사합니다.
총결산
<?php namespace App\Kantai;
use Illuminate\Database\Eloquent\Model;
use App\KantaiCollection;
class Kantai extends Model
{
/**
* コレクションの拡張
*
* @param array $models
* @return \App\KantaiCollection
*/
public function newCollection(array $models = [])
{
return new KantaiCollection($models);
}
}
Kantais 테이블의 데이터를 준비합니다.
함종과 이름의 간단한 데이터일 뿐, 그 안에는 이런 느낌이 든다.
Kantais
id | type | name | created_at | updated_at
----+----------+------+---------------------+---------------------
1 | 駆逐艦 | 吹雪 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
2 | 駆逐艦 | 睦月 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
3 | 軽巡洋艦 | 川内 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
4 | 軽巡洋艦 | 神通 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
5 | 重巡洋艦 | 愛宕 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
6 | 重巡洋艦 | 利根 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
7 | 戦艦 | 長門 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
8 | 戦艦 | 金剛 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
9 | 空母 | 赤城 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
10 | 空母 | 加賀 | 2015-12-24 00:00:00 | 2015-12-24 00:00:00
그러면 모든 기록을 얻고name을 키로 하는 연상 배열을 얻습니다.방법의 사용법은 이런 느낌이다.
app/Http/Controllers/KanColleController.php
<?php
namespace App\Http\Controllers\KanColle;
use App\Http\Controllers\Controller;
class KanColleController extends Controller
{
public function index()
{
$kantai = app('App\Kantai');
dd($kantai->all()->toHash('name'));
}
}
실행하다문제없이 얻었다.
그나저나 아까 방법은 all()밖에 없었는데 소장으로 반납하면...
물론 콜렉션 대상의 이름은'KantaiCollection'이다.
그래서 이번이 두 번째야. 그냥 이거 하고 싶을 뿐이야
이상, 교제해 주셔서 감사합니다.
총결산
Reference
이 문제에 관하여(LaavelEloquent Collection을 확장해 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/PG_marbo/items/91eebf9abe642cf96432텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)