我有一组食谱,每一个都包含类别。这是我的模特:
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 :(得分: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');
}
}
我还没有测试过这段代码,但它应该是我想到的。