2014-04-03 34 views
5

Tôi hiểu làm thế nào để sử dụng hùng biện cho các truy vấn cơ bản và các mối quan hệ, nhưng tôi bắt đầu nhận được bối rối khi lựa chọn thông tin dựa trên các mối quan hệ trong nhiều bảng.Laravel hùng hồn và Nhiều tham gia

Ví dụ, tôi có thể nhận được dữ liệu mình cần từ cơ sở dữ liệu bằng cách sử dụng các truy vấn xây dựng như sau:

$data['products'] = DB::table('product') 
    ->select('product.id', 'product.ref_num', 'productdetails.name') 
    ->join('productdetails', function($join) 
    { 
     $join->on('product.id', '=', 'productdetails.product_id') 
      ->where('productdetails.website_id', '=', '7'); 
    }) 
    ->leftJoin('product_category', function($join) use($submenu_id){ 
     $join->on('product.id', '=', 'product_category.product_id') 
      ->where('product_category.category_id', '=', $submenu_id); 
    }) 
    ->leftJoin('product_type', function($join) use($type_id){ 
     $join->on('product.id', '=', 'product_type.product_id') 
      ->where('product_type.type_id', '=', $type_id); 
    }) 
    ->get(); 

Về cơ bản, tôi nhận được dữ liệu từ các bảng sản phẩm và productdetails trên cơ sở đó loại các sản phẩm là một phần và loại sản phẩm đó là gì; Các giá trị này được xác định bởi các kết nối bên trong với các bảng pivot product_type và product_category.

Bây giờ giả sử tôi có những mối quan hệ hùng hồn thiết lập một cách chính xác, làm thế nào tôi sẽ đi về việc này trong hùng biện?

Dưới đây là những phần liên quan của mô hình hùng biện

sản phẩm

class Product extends Eloquent{ 

public function productdetails() 
{ 
    return $this->hasMany('Productdetail'); 

public function categories() 
{ 
    return $this->belongsToMany('Category', 'product_category', 'product_id', 'category_id'); 
} 

public function types() 
{ 
    return $this->belongsToMany('Producttype', 'product_type', 'product_id', 'type_id'); 
} 
} 

Chi tiết sản phẩm

class Productdetail extends Eloquent 
{ 


public function product() 
{ 
    return $this->belongsTo('Product'); 
} 
} 

ProductType

class ProductTypes extends Eloquent{ 


function products() 
{ 
    return $this->belongsToMany('products', 'product_id', 'type_id', 'product_id'); 
} 

Thể loại

class Category extends Eloquent{ 

public function products() 
{ 
    return $this->belongsToMany('product', 'product_category', 'category_id', 'product_id'); 
} 
} 

Cảm ơn trước

Trả lời

12

Giả sử quan hệ của bạn là tên bảng chính xác và có liên quan bao gồm: các loại và các loại, điều này sẽ thực hiện công việc:

Product::with('productdetails') 
    ->whereHas('categories', function ($query) use ($submenu_id) { 
      $query->where('categories.id', '=', $submenu_id); 
    }) 
    ->whereHas('types', function ($query) use ($type_id) { 
      $query->where('types.id', $type_id); // side note: operator '=' is default, so can be ommited 
    }) 
    ->get(); 

Nó sẽ chạy 2 truy vấn (đầu tiên cho nhận được sản phẩm phù hợp, thứ hai để biết chi tiết sản phẩm liên quan đến họ) và trở về hùng biện Collection

+0

cảm ơn bạn, nó có ý nghĩa bây giờ. – Rob

+0

sau một vài giờ tìm kiếm bất tận bạn đã lưu trong ngày của tôi, cảm ơn. – Sherif

-2

//routes.php

/* relationship is : content has images(one to many). And I am extracting the images based on the name that is given in the search input ($keyword = Input::get('keyword') */ 


    $dbresults = DB::table('contents')->join('images', 'images.content_id', '=', 'contents.id')->where('contents.Name', 'LIKE', '%' .$keyword. '%')->get(); 

    return View::make('/results')->with("results", $dbresults); 

Xem

@foreach($results as $result) 
{{ $result->image_1 }} 
@endforeach 
Các vấn đề liên quan