Как связать две таблицы в Laravel 5.0

В небольшом примере у меня есть 3 таблицы (2 из них важные). Мои столы: ПРОДУКТ, ТРАНСФЕР, СКЛАД.

Я хочу перенести ПРОДУКТ с 1 СКЛАДА на другой, и, очевидно, этот перенос должен быть в ТАБЛИЦЕ ПЕРЕДАЧ. Следующей может быть моя примерная модель.

ЗДЕСЬ ЛИЦО - ОТНОШЕНИЕ - МОДЕЛЬ

Теперь я использую Laravel 5.0. И когда я создаю модели, я делаю это с моделью TRANSFER:

<?php namespace Sicem;

используйте Illuminate \ Database \ Eloquent \ Model;

class TRANSFER extends Model {

/**
 * 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!

}

Теперь мой вопрос здесь, в моей модели СКЛАДА, я не знаю, что я могу сказать:

<?php namespace Sicem;

используйте Illuminate \ Database \ Eloquent \ Model;

class WAREHOUSE расширяет модель {

/**
 * 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: это название моего проекта

Пожалуйста, помогите мне.


person JORGE GARNICA    schedule 06.10.2016    source источник


Ответы (1)


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'];

}

Итак, вам нужно сделать что-то вроде этого:

$warehouseFrom = Warehouse::find(1);
$warehouseTo = Warehouse::find(2);
$product = Product::find(23);
$product->transfer($warehouseFrom->id, $warehouseTo->id);
person astratyandmitry    schedule 06.10.2016
comment
Если вы используете старую версию PHP, которая не поддерживает конструкцию Product::class, просто замените ее на 'Product' - person astratyandmitry; 06.10.2016
comment
Готово, забыли добавить свои пространства имен, расширения классов и тому подобное. - person astratyandmitry; 06.10.2016
comment
И вы также можете добавить отношение к классу Warehouse следующим образом: public function transfers() { return $this->hasMany(Transfer::class); } - person astratyandmitry; 06.10.2016
comment
Всего одна функция? Разве не обязательно две? потому что у меня два в трансферной таблице - person JORGE GARNICA; 06.10.2016
comment
Да, с Laravel это так просто. - person astratyandmitry; 06.10.2016
comment
Репутации не хватает, но буду! знак равно - person JORGE GARNICA; 07.10.2016