2013-07-27 2 views
9

나는 Laravel을 잠깐 보았다. 나는 마침내 그것을 집어 들기로 결정했다. 그것은 MVC 프레임 워크를 사용하여 처음이며 모델의 목적을 파악하는 데 어려움을 겪고 있습니다.Laravel 4 모델, 사용 방법

나는 초보자 가이드를 많이 읽어 봤는데이 꽤 많이 (현명한 Laravel) 자신의 모델에 모든

class Model extends Eloquent { 

} 

그리고 자신의 컨트롤러가 같은 것을 할,

입니다
$model = new Model; 
$model->text = "text"; 
$model->save(); 

저는 MVC 패턴 (아마도 가장 큰 초보자)에서 전문가는 아니지만 전체적인 점 (또는 적어도 작은 점)은 많은 작업을 분리하는 것이라고 생각했습니다. 그리고이 모델은 DB와 관련된 모든 것을 처리해야했습니다. 그래서 어떤면에서 이것은 나에게 잘못되었거나 최소한 모범 사례가 아닙니다.

그러나 일련의 기능을 설정하기 시작하면 모든 테이블에 하나의 모델이있는 문제가 발생할 수 있습니다. 다시 한번, 옳지 않은 것 같습니다. 따라서 모델을 어떤 방식으로 모호하게 만들어야합니다. 어떤 테이블에 대해서 어떤 행동을 취할 수 있다는 의미에서?

모두 나에게는 지금 당장 혼란스러워 보입니다.

답변

14

열 이름과 유효성 검사와 같이 공유 할 수없는 모델과 관련된 다른 것들이 있기 때문에 evey 테이블에 대한 모델이 필요합니다. 그러나 자신을 반복하고 있다고 생각한다면 BaseModel을 만들고 심지어 모든 방법이나 거기에 과부하 웅변 방법 :

class Order extends BaseModel { 

} 

하지만 당신의 모델과 테이블 이름은 Laravel을 따르는 경우는 모델에 많이 필요하지 않습니다 : 다음

class BaseModel extends Eloquent { 

    public function whatever() { 

    } 

    public function save(array $options = []) { 
     // do what you need to do 
     parent::save(); 
    } 

} 

만들려면 모델은 그것을 사용 패턴 (이 경우 테이블 이름은 'order s '), 테이블에 맞는 모델을 사용하려면이 간단한 선언이 필요합니다.

편집 :

컨트롤러는 뷰 모델에서 데이터를 전송하기위한 것입니다,하지만 그들은 너무, 당신의 데이터에 대한 많은 그들에 대해 거의 모든 것을해야 당신의 모델 (에서 거짓말 "뚱뚱한 모델, 스키니 컨트롤러를 알지 못한다 "), 그래서 그들은"통제 "를 가질만큼 충분히 알아야합니다.

class OrdersController extends BaseController { 

    public function process() 
    { 
     $order = Order::find(Input::get('orderId'))->process(); 

     return View::make('orders.showProcessedOrder')->with('order',$order); 
    } 

} 
+0

위대한 답변! 그리고 내가 처음에 의미했던 것에 대해 좀 더 정교하게 설명하기 위해, ID 1을 가진 행을 잡고 싶다면 Model :: find (1); 내 컨트롤러에서하지만 그 함수를 "찾기"배치하고 컨트롤러에서 실제로 수행하는 대신 컨트롤러에 결과를 반환하는 것이 가장 좋습니다 (해당 용어를 거의 사용하지 않음)? 이 경우에는 더 큰 것을 생각할 수도 있습니다. – Andreas

+0

방금 ​​대답으로 편집 됨. –

+0

하지만 당신은 실제로 옳습니다. 그들은 데이터 소스와 어댑터를 잊어 버렸습니다. 그렇기 때문에 각 데이터베이스에 대해 유효성 검증 및 관계를 100 만회 이상 다시 작성해야한다고 생각할 수 있습니다. 사실이 아니다. 조금도. ... 그리고이 마법의 너바나는 Laravel과 함께 할 수도 있습니다. 그러나 모든 것을 스스로 위로 연결해야합니다. 그만한 가치가 있니? 아니면 조직 해체에 가입 하시겠습니까? 당신에게 달려 있지만, 원래의 질문은 좋았다고 생각합니다. 자신이 초보자이든 아니든간에 좋은 디자인 관행에 대해 생각하고 있습니다. – Tom

-1

모델은 데이터베이스 테이블 주변의 래퍼 (응용 프로그램을 만드는 실제 작업)입니다. 데이터 저장을위한 코드 기반 인터페이스 인 OO를 제공하며 데이터 특정 논리를 모델에 넣을 수 있습니다. OOP는 모두 클래스와 객체에 대한 것이며 들어오는 HTTP 요청 및 데이터 저장소와 같은 것을 해당 형식으로 변환합니다.

귀하의 질문에 좋은 것입니다. 프리젠 테이션 레이어, 비즈니스 로직 레이어 및 관계형 데이터베이스에 데이터가 저장된 데이터 스토리지 레이어가있는 웹 응용 프로그램을 만드는 방법을 배울 때 훌륭한 기능을 추가 할 수 있습니다. 코드에서 데이터베이스 관련 항목의 추가 레이어.

안토니오 (Antonio)가 쓴 것처럼 MVC 프로그래밍에서 "뚱뚱한 모델, 스키니 컨트롤러"가 당신이 일하는 것입니다. 컨트롤러는 들어오는 요청을 올바른 모델에 전달하여 데이터베이스에 추가하는 등 몇 줄의 코드로 이상적입니다. (하지만 컨트롤러에 넣는 것이 가장 쉽습니다. MVC를 배우고 알아내는 것.)