2014-02-28 28 views
0

我有一個食譜集合,每個包含類別。這是我的模型:在巴黎創建查詢ORM

class Recipe extends \Model { 
    public static $_table = "recipe"; 

    public function categories() { 
     return $this->has_many_through('Category'); 
    } 
} 

class Category extends \Model { 
    public static $_table = "category"; 

    public function categories() { 
     return $this->has_many_through('Recipe'); 
    } 
} 

而且表既涉及:

class CategoryRecipe extends \Model { 
    public static $_table = "category_recipe"; 
} 

現在我需要創建一個查詢來獲取所有正在一個/多個類別的食譜。達到這個目標的方法是什麼?我想避免這樣做:

$results = $app['paris']->getModel('CategoryRecipe') 
         ->where_in("category_id",$selected_categories) 
         ->find_many(); 

foreach($results as $result) { 
    $recipe = $app['paris']->getModel('Recipe') 
          ->where('id',$result->recipe_id) 
          ->find_one(); 
    var_dump($receta->name); 
} 

創建過濾器?模型中的函數?不可能使它更優雅?

回答

0

這幾乎是我該怎麼做,但你可以用一種方法進行優化。將關係函數添加到鏈接/多對多表中。然後,而不是做額外的查詢您的foreach循環,你只需做:

foreach($results as $result) { 
    $recipe = $result->recipe()->find_one(); 
    var_dump($recipe) 
} 

所以你CategoryRecipe模型可能看起來像:

class CategoryRecipe extends \Model { 
    public static $_table = "category_recipe"; 

    public function recipe() { 
     $this->belongs_to('Recipe', 'recipe_id'); 
    } 

    public function category() { 
     $this->belongs_to('Category', 'category_id'); 
    } 
} 

我沒有測試此代碼,但它應該是什麼你在想我。

+0

致命錯誤:調用一個成員函數find_one()非對象 上:( – user3363963