[laravel] Eloquent collection 결과가 비었는지(empty) 확인

2015. 3. 23. 13:16 from Dev/php

Eloquent collection으로 작업하다 보면 항상 헷갈리는 부분이 있습니다. 바로 Eloquent model을 이용하는 collection을 불러왔을 때 결과가 비었는지 아닌지 하는 것입니다.

가령 블로그를 만들면서 특정한 $tag을 가지는 포스트들을 아래와 같이 가져오면..

$posts = Post::where('tag', $tag)->get();

 

결과값이 있는지를 봐야겠지요.. 무의식적으로 아래와 같이 빈 결과인지 아닌지를 체크한다고 해놓고 지나가면 나중에 뭐가 문제인지 모르는 경우가 생깁니다:

if (empty($posts)) { }

if (!$posts) { }

if (isset($posts) { }

 

 

이럴 때에는 아래처럼 해주시면 됩니다:

if ($result->isEmpty()) { }

if ($result->count()) { }

 

 

 

 

Posted by banasun :

[mysql] 현재로부터 6시간 이내의 record를 select 하기

2015. 3. 19. 23:22 from Dev/sql

오늘은 SQL query문 중 기초적인 부분에 대해서 써볼까 합니다. 물론 오늘 한 작업 중 한 가지 소스이지요 ㅋㅋ

DATETIME 필드를 기준으로 현재로부터 6시간 이내에 발생한 record를 불러오는 겁니다.

MYSQL에는 DATE_ADD()라는 함수가 있습니다. 이 함수를 이용하는 거지요.


SELECT * FROM foo WHERE created_at > DATE_ADD(now(), INTERVAL -6 HOUR)


지금 현재 시각 now() 에서 6시간의 INTERVAL을 빼주었으니 현재에서 6시간 이내가 되는 거지요.

HOUR 대신에 MINUTE, SECOND, DAY 등으로 할 수도 있으니 (쓰다 보니 DAY를 이용한 거는 예전에 포스팅을 했던 것 같기도..) 응용해서 쓰시면 됩니다.

Posted by banasun :

[php] mime type 알아내는 방법 - PHP version < 5.3 일 경우 꼼수

2015. 3. 16. 17:31 from Dev/php

파일을 업로드 전송받는 경우 파일 MIME type을 결정해주어야 하는 경우가 종종 생깁니다.

오늘은 이미지를 데이터베이스에 blob으로 넣는 작업을 하면서 클라이언트 요청으로 MIME TYPE도 같이 저장해주도록 하였습니다.

시작하면서는 Fileinfo function이 있으니 별거 아니겠네.. 하였는데 역시나 제가 하는 일은 쉽게 끝나는 법이 없군요. OTL

일단 서버 PHP 버전이 5.2라 Fileinfo 가 이용 불가능한 상태였고, mime_content_type 함수는 depreciated 입니다.

요새 제 프로젝트의 프레임워크로 이용하는 laravel에는 mime type을 guessing하는 부분이 있긴 한데..

오늘은 할 수 없이 업로드되는 파일 확장명을 기반으로 mime type을 리턴해주는 함수를 구글링해서 이용하였습니다:

http://www.brightcherry.co.uk/scribbles/php-alternative-to-the-depreciated-mime_content_type-function-and-fileinfo-functions/

물론 이 방식은 이용자가 전송하는 파일의 확장명을 의심없이(?) 받아들여서 처리하기 때문에 보안상 문제의 여지는 있습니다.

이런 문제를 해결해주는 것이 맞는 것이긴 한데.. 성격상 서버 PHP 버전만 업그레이드 해주면 되는 문제를 굳이 시간을 들여가면서 하고 싶진 않기도 하고.. 어차피 DB에 있으니 보안상 문제는 그나마 조금 덜하니 차라리 DB에서 꺼내주는 과정만 신경을 써주면 되겠구나 하면서 마무리하였습니다.

Posted by banasun :

[laravel - tip] Laravel과 angularjs 같이 쓸 때 {{ curly braces }} 사용방법

2015. 3. 6. 14:58 from Dev/laravel

Laravel과 angularjs를 같이 이용하려고 하다 보니.. laravel의 template engine인 Blade와 angularjs 모두 이 double curly braces를 이용하는 문제가 있네요. ㅋㅋ

이럴 때에는 blade의 template에서 angularjs의 {{ }} 를 이용할 때 앞에 @를 붙여주면 간단히 해결됩니다. 아래처럼 말이지요.



@{{ 앞에 @가 있으면 blade가 치환을 안합니다  }}


'Dev > laravel' 카테고리의 다른 글

laravel form 이용시 arguments  (0) 2015.04.01
Posted by banasun :

한달전 (또는 특정 날짜, 며칠 이전) 파일들 모두 삭제하기

2015. 3. 6. 10:41 from Dev/Linux

오늘은 간단한 명령이지만 정작 쓰려면 긴가민가 하는 명령을 하나 설명드립니다.

서버를 운영하다 보면 (따로 관리자 없이) 로그파일이나 더이상 이용하지 않는 임시 파일들이 많이 생깁니다. 저 같은 경우는 네이버 신디케이션을 이용하면서 네이버쪽에 ping 요청하면서 신디케이션 문서를 xml로 생성해 놓는데요, 몇 천개를 하다 보니 ping 요청을 한다고 중국집 마냥 바로 와서 가져가는게 아니니 서버에 계속 쌓이게 되더군요. 생각없이 있다가 디렉토리를 보니 파일이 너무 많아졌습니다. -_-;;

삭제를 하려고 해도 이게 네이버에서 가져간 건지 아닌지 모르니 - 경험상 며칠씩 걸리는 경우도 있더군요 - 10일 정도 기간을 두고 그 이전 xml 파일만 삭제할 필요가 생겼습니다.

이럴 때에는 아래와 같이 하면 됩니다 :



find *.xml -mtime +10 -exec rm {} \;


find 명령은 다들 아시지요? 첫번째 인수는 디렉토리 이름이나, * 등 아무거나 들어가도 됩니다.

두번째 인수 -mtime은 기간을 일 단위로 정해줍니다. 한 달로 하려면 -mtime +30 하면 되겠지요.

세번째 -exec는 다음 명령으로 전달하는 부분입니다. 저는 삭제를 하려고 하니 rm 명령어를 이용하겠습니다. 그 뒤에 나오는 {} 과 \; 는 꼭 입력해주셔야 합니다.





Update: 명령이 실행된 파일들을 보고 싶으시면 -print 옵션을 추가하시면 됩니다.



find *.xml -mtime +10 -print -exec rm {} \;
Posted by banasun :

[php] array_unique의 결과값을 json_encode 로 변환시 복불복에 대해서

2015. 2. 14. 05:24 from Dev/php

php라는 언어 자체가 상당히 헐렁(loose. 비하는 아님)한 언어이기 때문에 편하기도 하지만, 가끔 가다가는 결과값이 어떻게 올지 불확실할 수 있다는 점 또한 받아들여야 하는데.. 삽질 열심히 하다 원인을 알게 되면 너무 허무합니다.

오늘의 삽질은.. 처음에 손대면서는 30분이면 되겠지 하고 시작한 처음은 미미하였던 일이.. 시간이 지나면서 해결도 안되고 점점 창대해지는 사태를 거치는 상황이었습니다.

요는. array_unique를 써서 array 내의 중복값을 없앤 다음에 json_encode로 다른 app에 넘겨주면 끝나는 일이었습니다.

뭐 간단하네. 요거만 하고 자야지 했는데 이게 왠걸;; 어디서 났는지 모를 에러들이..

원인을 찾아보니 array_unique로 정리를 할 때, 그냥 예쁘게 이렇게 되는 걸 바랬는데 :

['Series A', 'Series B']


가끔 가다 그렇게 안되고 이렇게 되고 마는 것입니다.

[{"0":"'Series A","1":"Series B"}]


뒤져보다 보니, array_unique로 중복값을 정리하면서 어떤 경우에는 숫자로 인덱싱된 array가 남지 않는 경우가 생긴다는 거였습니다. 즉 json_encode해주면 위의 경우처럼 숫자 인덱싱이 남아버리는 거지요. ㅡ.ㅡ

원인을 알고나니 방법은 의외로 간단히..

json_encode 해주기 전에 array_values로 numerically indexed array를 강제로 만들어주는 것으로 해결되었습니다.

array_values(array_unique($data))


php를 다시 한번 돌아보게 해주는 하루였습니다. ㅋㅋ

Posted by banasun :

gnuboard jQuery 버전 문제

2015. 2. 12. 17:18 from Dev/etc

그누보드로 된 사이트를 업데이트 하다 bootstrap을 적용하려고 해보고 있는데, 이상하게 안되어서 헤매다 알고 보니 그누보드5 배포판은 jQuery 버전 1.8.3을 기본으로 하고 있네요.

아시다시피 bootstrap3는 jQuery 버전이 좀 높아야 되지요.. 현재 stable version은 2.1.3이고, 최소 1.11 대 이상은 되어야 기타 jQuery의 플러그인까지도 이용가능할 것으로 보입니다.

혹시 그누보드에 jQuery 버전 높은 거를 이용해도 되나? 하고 단순히 생각했었는데, 이런. 1.8.3과 2 사이에는 넘사벽이 있네요. major update가 한두번 있다 보니 그누보드의 javascript 부분을 상당히 많이 뜯어고치기 전에는 1.8.3을 그냥 이용하는 수밖에 없는 거로 결론을 냈습니다;;

괜히 2.1.3 로드해봤다, 1.11 로드해봤다.. 이 기능은 되는데 저 기능은 안되고 삽질만 몇 시간 동안 했네요.

Posted by banasun :

pip으로 mysql-connector-python 설치

2015. 2. 7. 01:06 from Dev/python

binary로 설치할 때는 http://dev.mysql.com/downloads/connector/python/에서 OS별로 다운받아서 설치하면 됩니다.

제 Mac에서는 python2와 3을 동시에 사용하고 있어서.. pip으로 설치하는 방법을 찾았습니다:


pip3.4 install --allow-external mysql-connector-python mysql-connector-python


3rd party pip repo라 옵션이 붙어야 하는 것 같습니다.

Posted by banasun :

[python] euc-kr 파일을 읽어서 utf-8로 작업할 때

2015. 2. 6. 01:55 from Dev/python

정말이지 이놈의 encoding은..

며칠전에 우편번호를 db에 집어넣어야 하는데.. 받은 데이터가 euc-kr입니다.

바꾸어 주는 방법은 간단합니다. file handler를 fh라 할 때, readline()으로 읽어오면 한줄만 넣어주면 됩니다 :

line = fh.readline()

line = unicode(line, 'euc-kr').encode('utf-8')

이렇게 해주시면 됩니다.

왜 네이버 웹툰 '하루3컷'이 생각이 날까요? ㅋㅋ

Posted by banasun :

laravel + mongodb 개발

2015. 2. 5. 23:55 from Dev

소규모 프로젝트 하나를 진행할 게 있었는데 환경을 어떻게 할까 고민하다 laravel을 적용하였습니다. 개인적으로는 code igniter는 스타일이 좀 안맞다고 해야 하나.. 하여튼 안친해지더라구요. 그래서 얼마전부터 눈팅하던 laravel을 써보기로 하였습니다.
뭐 framework을 새로운 거로 하는 김에 데이터베이스도 mongodb로. 결과는 엄청 헤맸습니다, 처음엔요. 그런데 너무 재미있게 했습니다.

자세한 환경은 다음에 포스팅하기로 하고(모바일 티스토리앱 처음 깔고 써보는 중이라;;) 느낌만 일단 적으면, laravel은 php framework를 도입하겠다면 꼭 추천드립니다. 아직 국내 개발자 커뮤니티가 충분하진 않다는게 좀 있지만 영어로는 관련 라이브러리나 문서도 많고요.

국내에서 laravel의 가장 큰 적은 php 버전입니다. 대부분의 호스팅업체는 아직 php 5.3 버전이지요. Laravel은 5.4 이상이라 독립서버거나 가상서버가 아니면 이용하기 어렵습니다.

Laravel의 기본 db는 mysql입니다. 하지만 mongodb를 붙여서도 기본 orm인 eloquent와 잘 붙더군요. Mysql보다 차라리 더 낫다고 느껴질 정도입니다.

Laravel은 작년에 php framework 평가에서 1위를 했습니다. 물론 평가하는 사람 주관이 있겠습니다만 여러 평가에서 CI는 지는 해(?)라는 의견이 다수 있지요. 굳이 CI로 잘하는데 laravel로 옮겨타는 건 바람직하진 않지만 새로운 시도를 한다면 laravel이 나쁘지 않다!가 오늘의 결론입니다. 데탑에서 썼으면 좀더 자세히 쓸텐데 모바일이라.. 자세한 내용은 천천히 프로젝트 정리하며 올리겠습니다. 페이퍼웍은 개발끝난 다음에 하는 것이 한국에서 개발자 본연의 자세(잉?)거든요 ㅋㅋ

Posted by banasun :