2016-10-06 5 views
1

Dans un petit exemple, j'ai 3 tables (2 d'entre elles sont importantes). Mes tables sont PRODUIT, TRANSFERT, ENTREPÔTComment relier deux tables dans Laravel 5.0

Je veux transférer le PRODUIT d'un ENTREPÔT à un autre et évidemment ce transfert doit être dans la TABLE DE TRANSFERT, mon exemple de modèle pourrait être le suivant.

HERE THE ENTITY - RELATION - MODEL

Maintenant, je suis sur Laravel 5.0 Et quand je crée les modèles im faire, avec le modèle de transfert:

<?php namespace Sicem; 

utilisation Illuminate \ Database \ Eloquent \ Model;

classe TRANSFERT étend Modèle {

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'TRANSFER'; 

/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = ['id','ware_ori_id','ware_end_id','product_id']; 

public function product(){ 
    return $this->belongsTo('Sicem\Product'); 
}//THIS IS OK! 
public function sourceware(){ 
    return $this->belongsTo('Sicem\Warehouse\ware_ori_id'); 
}//I THINK THIS IS OK! 
public function endware(){ 
    return $this->belongsTo('Sicem\Warehouse\ware_end_id'); 
}//I THINK THIS IS OK! 

}

Ma question est ici dans mon modèle ENTREPÔT, je ne sais pas ce que je peux faire:

<?php namespace Sicem; 

utilisation Illuminate \ Base de données \ Eloquent \ Modèle;

classe ENTREPÔT étend le modèle {

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'WAREHOUSE'; 

/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = ['id','name']; 

public function transfer(){ 

    return $this->hasMany('Sicem\TRANSFER'); 
}//I supose this. 
//But is or not necesary to have 2(two) functions for the relation in my TRANSFER model??????????? 

}

SICEM: est mon nom de projet

S'il vous plaît aidez-moi.

Répondre

0
class Product { 

    protected $table = 'PRODUCT'; 

    protected $fillable = ['name']; 

    public function transfers() 
    { 
    return $this->hasMany(Transfer::class); 
    } 

    public function transfer($warehouse_from_id, $warehouse_to_id) 
    { 
    return Transfer::create([ 
     'product_id' => $this->id, 
    ]); 
    } 

} 

class Transfer { 

    protected $table = 'TRANSFER'; 

    protected $filalble = ['ware_ori_id', 'ware_end_id', 'product_id']; 

    public function warehouse_from() 
    { 
    retrun $this->belongsTo(Warehouse::class); 
    } 

    public function warehouse_to() 
    { 
    return $this->belongsTo(Warehouse::class); 
    } 

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

} 

class Warehouse { 

    protected $table = 'WAREHOUSE'; 

    protected $fillable = ['name']; 

} 

Vous avez donc besoin de faire quelque chose comme ceci:

$warehouseFrom = Warehouse::find(1); 
$warehouseTo = Warehouse::find(2); 
$product = Product::find(23); 
$product->transfer($warehouseFrom->id, $warehouseTo->id); 
+0

Si vous utilisez ancienne version de PHP qui appuie la construction 'produit :: class', juste le remplacer par' 'Product'' – astratyandmitry

+0

** Fait oublier ** pour ajouter vos espaces de noms, la classe s'étend et des trucs comme ça. – astratyandmitry

+0

Et vous pouvez également ajouter une relation à la classe 'Warehouse' comme suit: ' fonction publique transfère() { return $ this-> hasMany (Transfer :: class); } ' – astratyandmitry