laravel查询多个类和/或表

时间:2014-10-12 01:41:28

标签: php laravel laravel-4

如何查询两个以上的表。我想要做的是有一个由类型查询的产品列表,然后查询productvariations - 其中产品变体有producttype_id = $ producttype-> id

Route::get('browse/{producttype_slug}/{genre_slug}', array(
    'as' => 'products.viewbygenre', 
    function($productype_slug, $genre_slug) 
    {       
        $producttype = ProductTypes::where('slug', '=', $productype_slug)->firstOrFail();

        $genre = GenreTypes::where('slug', '=', $genre_slug)->firstOrFail();

        // error below
        $products = Product::with(array('ProductVariations', 'GenreTypes'))
         ->where('genre', '=', $genre->id)->get();

        return View::make('products.viewbygenre')->with(compact('productvariations', 'genre', 'producttype'));

}))->where('producttype_slug', '[A-Za-z\-]+')->where('genre_slug', '[A-Za-z\-]+');

产品类

class Product extends \Eloquent {
    protected $table = "products";
    protected $fillable = ['keywords', 'description', 'title', 'slug', 'release_date', 'clip'];

    public function productvariations() {
        return $this->hasMany("ProductVariations");
    }

    public function variations() {
        $variations = $this->productvariations()->get();
        return $variations;
    }


    public function genres() {
        return $this->belongsToMany('GenreTypes', 'product_genretypes', 'product_id', 'genretype_id')->withTimestamps();
    }   

}

1 个答案:

答案 0 :(得分:0)

我没有完全理解这个问题所以我只想提到这一点:

// error below
$products = Product::with(array('ProductVariations', 'GenreTypes'))
         ->where('genre', '=', $genre->id)->get();

我相信你不能以这种方式使用where子句' with'阵列。如果你的with方法中有多个参数,我不能100%确定这是否有效,但这值得尝试:

$products = \Product::with(array('ProductVariations', 'GenreTypes' => function ($query)
    {
        // Note I think you also had a mistake in your column name 
        // (genre should be genretype_id?)
        // Also ... not sure how you are getting the $genre->id variable 
        // as I cannot see the the $genre object / collection in this method you provided !
        $query->where('genretype_id', '=', $genre->id);
    }))->get(); 

告诉我们你是如何上场的。