2014-01-16 31 views
0

我有以下表格:Laravel 4:模型或控制器中的Where子句?

users 
    - id 
    - username 

kids 
- id 
- user_id 

groups 
- id 

group_user 
- id 
- group_id 
- user_id 

sits 
- id 
- user_id 

他們當然有ADDL領域,但它只是多餘的信息。

我的用戶模型包含:

public function kids() 
{ 
    return $this->hasMany('Kid'); 
} 

public function sits() 
{ 
    return $this->hasMany('Sit'); 
} 

public function groups() 
{ 
    return $this->belongsToMany('Group')->withPivot('status'); 
} 

我UserController的@ show方法是這樣的:

public function show($user) 
{ 
    $user = User::find($user)->load('kids', 'groups', 'sits'); 
    return $user; 
} 

所以,當我打/user/show/1我得到我所期望的JSON。

{ 
    "id": "1", 
    "username": "somename", 
    "email": "[email protected]", 
    "kids": [ 
    { 
     "id": "4", 
     "user_id": "1" 
    }, 
    { 
     "id": "3", 
     "user_id": "1" 
    }, 
    { 
     "id": "1", 
     "user_id": "1" 
    } 
    ], 
    "groups": [ 
    { 
     "id": "1", 
     "name": "Group Name", 
     "pivot": { 
     "user_id": "1", 
     "group_id": "1" 
     } 
    } 
    ], 
    "sits": [ 
    { 
     "id": "2", 
     "user_id": "1", 
     "start": "2014-01-16 00:00:31", 
     "end": "2014-01-16 00:00:31", 
     "sitter_id": "2" 
    } 
    ] 
} 

但我的問題是什麼是「Laravel方式」添加另一個對象到這個響應被過濾?比方說,我想返回sits,但也要返回upcomingSits,其中它被某個「開始」日期或「sitter_id」= 0過濾。

這種邏輯的適當的MVC方法在哪裏?我將如何使用Laravel在此響應中返回它?

+0

只是閱讀有關最佳做法這個自己:對於新手laravel一些提示](http://laravel.io/topic/18/some-tips -for-laravel-newbies)(特別是題爲「你的ORM不是你的模型」的部分) –

+0

謝謝,馬克。是的,ORM不是你的模型有一些好的想法。但是,我仍然不清楚。我可以在我的js模板中執行邏輯,因爲我擁有我需要的一切;它似乎有可能是一個更好的方法。 – brianrhea

+0

使用Repository接口而不是捆綁控制器直接使用ORM似乎很受Laravel社區中少數人的歡迎 - 可以幫助進行測試,並且如果您願意,可以在以後更輕鬆地從持久性基礎架構中移出作爲這個測試教程的一部分 - http://net.tutsplus.com/tutorials/php/testing-laravel-controllers/是這個方法的一個相當簡單的介紹 - 所以答案可能是'where'子句沒有去模型或控制器 - 取決於你的應用程序的大小和複雜性:) – glendaviesnz

回答

0

你可以做這樣的事情:

$user = User::with('kids', 'groups', 'sits')->find($user_id)->toArray(); 
$sits = Sit::where(.....)->get()->toArray(); 

return Response::json(array(
    'user' => $user, 
    'sits' => $sits 
));