Laravel 5 가 json api 를 디자인 할 때
3434 단어 laravel
api 를 개발 할 때 이 문 제 는 클 라 이언 트 와 가장 많이 교섭 하 는 문제 입 니 다. 예 를 들 어 하나의 user 구조, 돌아 오 는 필드 는 원래 user 입 니 다.name 의, string 형식 일 것 입 니 다.그러나 데이터베이스 가 이 필드 를 디자인 할 때 null 로 허용 되 기 때문에 이 필드 를 가 져 오 면 null 로 돌아 갈 수 있 습 니 다. 이것 은 약 한 유형 언어 에 문제 가 없 지만 강 한 유형의 언어 에 대해 서 는 문자 의 유형 판단 을 추가 해 야 할 수도 있 습 니 다.
또는 데이터베이스 에 있 는 text 필드 에 json 데이터 가 저장 되 어 있 습 니 다. 지금 꺼 낼 때 변환 을 해 야 합 니 다.
그래서 이 문제 에 대해 우 리 는 하나의 격식 방법 을 생각 할 것 이다.이 방법 은 자 연 스 럽 게 model 에 쓰 여 있 습 니 다. laravel 5 에서 저 는 이런 방법 을 사용 합 니 다.
모델 중:
class Inbox extends Model {
protected $table = 'inbox';
public static function format()
{
return function($item) {
$tmp = $item->toArray();
unset($tmp['deleted_at']);
$tmp['sort'] = $tmp['id'];
$tmp['uid'] = $tmp['sender'];
$content = json_decode($item->content, true);
$tmp['content'] = json_decode($content['content'], true);
return $tmp;
};
}
public static function formatRaw()
{
return function($item) {
$tmp = $item->toArray();
unset($tmp['deleted_at']);
$tmp['sort'] = $tmp['id'];
$tmp['uid'] = $tmp['sender'];
return $tmp;
};
}
}
이곳 의 Inbox 는 두 가지 반환 형식 을 설계 하 였 으 며, 모든 반환 형식 은 되 돌아 오 는 패 킷 함수 이 며, 그 다음 에 controller 에 있 습 니 다.
$builder = Inbox::where('receiver', $uid)->where('sender', 0);
if ($max) {
$builder->where('id', '<', $max);
}
$inboxs = $builder->orderBy('id', 'desc')->get();
$data = $inboxs->transform(Inbox::formatRaw());
자, 이렇게 되 돌아 오 는 $data 는 구조 화 된 데이터 입 니 다.
여기 서 주로 laravel 의 Collection 에 있 는 transfrom 함수 가 너무 좋다 고 말 하고 싶 습 니 다. 매개 변 수 는 닫 힌 패키지 입 니 다. 그리고 이 닫 힌 패 키 지 는 model 에 밀봉 되 어 있 습 니 다. 클 라 이언 트 가 특정한 출력 필드 를 수정 하거나 업데이트 하려 면 format 함수 만 수정 하면 됩 니 다.
질문
예 를 들 어 위의 예 에서 inbox 는 uid 가 있 고 인 터 페 이 스 는 user 의 정 보 를 되 돌려 야 합 니 다.그러면 이때 model 의 foreign key 가 좋 은 역할 을 합 니 다.
class Inbox extends Model {
protected $table = 'inbox';
public function user()
{
return $this->hasOne('User', 'id', 'uid');
}
public static function format()
{
return function($item) {
$user = $item->user;
$tmp = $item->toArray();
unset($tmp['deleted_at']);
$tmp['sort'] = $tmp['id'];
$tmp['uid'] = $tmp['sender'];
$content = json_decode($item->content, true);
$tmp['content'] = json_decode($content['content'], true);
$tmp['user'] = $user;
return $tmp;
};
}
}
그러나 모든 데이터 순환 으로 user 를 가 져 오지 않도록 load 나 with 를 표시 해 야 합 니 다.
$builder = Inbox::where('receiver', $uid)->where('sender', 0);
if ($max) {
$builder->where('id', '<', $max);
}
$inboxs = $builder->orderBy('id', 'desc')->get();
$inboxs->load('user');
$data = $inboxs->transform(Inbox::formatRaw());
총결산
기본적으로 이 두 가지 문 제 를 해결 하고 orm 을 설계 하 며 laravel 로 인 터 페 이 스 를 쓰 면 매우 빠르다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.