我有这样的陈述,它工作正常但不如我想要的那样好:
$recipes = DB::table('recipes')
->join('category_recipe', 'recipes.id', '=', 'category_recipe.recipe_id')
->join('category', 'category.id', '=', 'category_recipe.category_id')
->join('users', 'users.id', '=', 'recipes.user_id')
->where('category.id', '=', $cat_id)->get(array('recipes.*','users.*'));
我怎样才能将此翻译成Eloquent?
为什么吗
我想为多种方法使用一种视图
这个观点或者foreach看起来像这样:
@foreach($recipes as $recipe)
{{link_to_route('recipe_details',$recipe->title,array('id'=>$recipe->id))}} - By {{ $recipe->user->firstname }} - Category: @foreach($recipe->category as $cat) {{ $cat->title }} @endforeach </br>
@endforeach
正如您所看到的,我正在使用&#34;用户&#34;关系。显然,这个foreach并不适用于顶部的Query,因为没有&#34; user&#34;模型。
那么如何将查询翻译成Eloquent?
我试过了
$recipes = Recipe::with('category')->where('category_id',$cat_id)->get();
但这不起作用。有什么提示吗?
以下是我的模特:
Recipe.php
public function user() {
return $this->belongsTo('User','user_id');
}
public function category() {
return $this->belongsToMany('Category','category_recipe');
}
Category.php
public function recipes() {
return $this->belongsToMany('Recipe');
}
User.php
public function recipes() {
return $this->hasMany('Recipe','user_id');
}
谢谢!
答案 0 :(得分:1)
你可以试试这个:
$recipes = Recipe::with(array('user', 'categories' => function($q) use ($cat_id) {
$q->where('id', $cat_id);
}))->get();
以下更改:
public function category() {
return $this->belongsToMany('Category','category_recipe');
}
收件人category
categories
中Recipe.php
}:
public function categories() {
return $this->belongsToMany('Category','category_recipe');
}
顺便说一句,您也可以像这样使用join
(如果您在任何情况下需要,请使用Eloquent
模型):
Recipe::join('category_recipe', 'recipes.id', '=', 'category_recipe.recipe_id')
->join('category', 'category.id', '=', 'category_recipe.category_id')
->join('users', 'users.id', '=', 'recipes.user_id')
->where('category.id', '=', $cat_id)->get();
更新:您也可以尝试:
$recipes = Recipe::whereHas('categories', function($q) use ($cat_id) {
$q->where('id', $cat_id);
})->with('user')->get();