Laravel 4 Eloquent Two Pivot Table

时间:2015-01-19 18:50:17

标签: laravel eloquent

我的桌子

Modelos
ID
nome slug
marca_id

PECAS
ID
codigo

modelo_peca
modelo_id
peca_id

produtos
ID
categoria_id
codigo
诺姆

categorias
ID
诺姆
蛞蝓

我有这些模型

class Modelo extends Eloquent
{

   public function pecas()
   {
       return $this->belongsToMany('Peca');
   }

}

class Peca extends Eloquent {

    public function modelos()
    {
        return $this->belongsToMany('Modelo');
    }

    public function produtos()
    {
        return $this->belongsToMany('Produto');
    }

}

class Produto extends Eloquent {

    public function pecas()
    {
        return $this->belongsToMany('Peca');
    }

}

我正在尝试创建一个将与modelo相关的所有产品传递给视图的路径。怎么了?

Route::get('/modelo/{slug?}', function($slug = null) {
if ($slug) {
    $id = Modelo::where('slug', $slug)->pluck('id');
    $pecas = Modelo::find($id)->pecas;
    $produtos = Peca::where('id', $pecas)->get();
}
return View::make('produto.home')->with('produtos', $produtos);

1 个答案:

答案 0 :(得分:0)

使用预先加载

脱离我的头顶(也跨越语言障碍,我会尽我所能) 您似乎希望所有产品(produtos)用于特定页面类别的其他分类(可能是错误的,但您可以根据需要调整代码)

where()方法需要三个参数iirc,因此第一个查询将是$id = Modelo::where('slug', '=', $slug)->pluck('id'); 这同样适用于其他陈述。

完整查询:

if($slug) 
{
    $query = Modelo::with('pecas.produto')
        ->where('slug', '=', $slug)
        ->get();

    $produtos = $query->produto;
}

return View::make('produto.home')->with('produtos', $produtos);

在这里,我采取了不同的方法,渴望加载关系,我不是百分之百确定这是你希望如何完成这一点,但它希望为你提供一个基础,正确地使用你的关系雄辩。

您不需要手动获取主键并执行多个查询,请查看Laravel网站上的Eloquent文档。