Saya baru mengenal Laravel. Sekarang saya butuh bantuan untuk bergabung dengan tabel fasih.

Berikut adalah struktur tabel saya,

Tabel Produk

product_id    product_code    product_name
     1            1434            ABC

Tabel Riwayat Produk

history_id    product_id    cost    invoice_number
    1              1        100         ABC-01

Meja Tur Produk

tour_id       product_id    provider_name
    1              1            TEST

Sekarang saya bergabung dengan 3 tabel ini,

$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();

Ini bekerja dengan benar. Tapi menurut saya Laravel juga menyediakan Eloquent Relationship. Seperti, hasOne, hasMany, belongsTo, belongsToMany dll....

Adakah yang tahu metode mana yang digunakan untuk struktur saya?

Terima kasih sebelumnya.

2
Jaydeep Mor 9 November 2017, 08:27

1 menjawab

Jawaban Terbaik

Ubah kueri Anda seperti ini:

$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();

Berikut adalah kode untuk file model:

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');        
    }

}

Dan file model untuk tabel lain bernama Product_history dan 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');
    }

}

Dan

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProductTour extends Model
{    

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

}
4
Ketan Solanki 9 November 2017, 06:13