2017-11-09 8 views
2

私はLaravelに新規です。今私は結合表の雄弁にいくつかの助けが必要です。ここでLaravel eloquent join three table

製品表

product_id product_code product_name 
    1   1434   ABC 

製品履歴表

history_id product_id cost invoice_number 
    1    1  100   ABC-01 

製品ツアー表

、私のテーブル構造であります210
tour_id  product_id provider_name 
    1    1   TEST 

今、私はそれが正常に動作しているこれら3台、

$product = product::join('product_history as ph', 'product.product_id', '=', 'ph.product_id', 'inner') 
      ->join('product_tour as pt', 'product.product_id', '=', 'pt.product_id', 'inner') 
      ->where('product.product_id', '1') 
      ->get() 
      ->toArray(); 

に参加します。しかし、私はLaravelもEloquent Relationshipを提供すると思います。同様に、hasOnehasManybelongsTobelongsToManyなど....

方法は、私の構造のために使用される任意のアイデア?

ありがとうございます。

答えて

1
は次のようにクエリを変更し

namespace App; 
use DB; 
use Illuminate\Database\Eloquent\Model; 

class Product extends Model 
{ 
    public function producthistory() 
    { 
     return $this->hasMany('App\ProductHistory', 'product_id','history_id');   
    } 
    public function producttour() 
    { 
     return $this->hasMany('App\ProductTour', 'product_id','tour_id');   
    } 

} 

とモデルProduct_historyとして命名他のテーブル用のファイルとproduct_tour

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class ProductHistory extends Model 
{  

    public function products() 
    { 
     return $this->belongsTo('App\Product', 'history_id','product_id'); 
    } 

} 
:ここ
$product = product::Select("*") 
      //->with('product_history','product_tour') 
      //Use this with() for condition. 
      ->with([ 
        'ProductHistory' => function ($query){ 
            $query->select('*'); 
        }, 
        'ProductTour' => function ($query) use ($ProviderName) { 
            $query->select('*')->where("provider_name", "=", $ProviderName); 
        }, 
      ]) 
      ->where('product.product_id', '1') 
      ->get() 
      ->toArray(); 

は、モデルファイルのコードです

および

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class ProductTour extends Model 
{  

    public function products() 
    { 
     return $this->belongsTo('App\Product', 'tour_id','product_id'); 
    } 

} 
+0

ありがとうございました。はい、関係を設定する必要があります。 –

+0

ちょっと答えを更新します。 –

+0

ありがとうございます。あなたはなぜhasManyメソッドを使用するのか説明できますか? –