Предполагая, что ваш
sales
таблица имеет первичный ключ id
promotion
таблица имеет первичный ключ id
damages
таблица имеет первичный ключ id
И каждый первичный ключ имеет тип unsigned bigInt
, прежде всего вам нужно изменить миграцию warehouses
следующим образом, чтобы добавить внешние ключи:
Schema::create('warehouses', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title', 32);
$table->unsignedBigInteger('sales_account_id');//note this line change
$table->unsignedBigInteger('promotions_account_id');//note this line change
$table->unsignedBigInteger('damages_account_id');//note this line change
$table->string('address')->nullable();
$table->string('phones')->nullable();
$table->string('fax', 12)->nullable();
$table->string('email')->nullable();
$table->engine = 'InnoDB';
$table->charset = 'utf8';
$table->softDeletes();
$table->timestamps();
//add foreign keys
$table->foreign('sales_account_id')->references('id')->on('sales')->onUpdate('cascade');
$table->foreign('promotions_account_id')->references('id')->on('promotion')->onUpdate('cascade');
$table->foreign('damages_account_id')->references('id')->on('damages')->onUpdate('cascade');
});
После того, как вы определили свои внешние ключи, вы можете связать вашу модель Warehouse
с остальными тремя моделями с помощью красноречивых методов связи.
Предполагая, что отношения между:
- склады и продажи - ОДИН ОДИН.
- склады и рекламные акции ОДИН-ОДИН.
- склады и повреждения один на один.
Внутри модели склада вы можете определить три метода:
public function sale()
{
return $this->hasOne('App\Sale', 'sales_account_id');
}
public function promotion()
{
return $this->hasOne('App\Promotion', 'promotions_account_id');
}
public function damage()
{
return $this->hasOne('App\Damage', 'damages_account_id');
}
Это просто подсказка, чтобы дать вам представление о том, как вы можете связать модели, однако, основываясь на ваших отношениях между таблицами, методы могут отличаться.
Как только вы определили правильные отношения, вы стремитесь загрузить любое отношение следующим образом:
$warehouse = \App\Warehouse::with('sale')->get();//for example to eager load warehouses with sales
OR
вы можете загружать продажи, когда у вас есть склад, например:
$warehouse = \App\Warehouse::first();
$sale = $warehouse->sale;
Все сценарии не могут быть определены здесь, поскольку они огромны. Тем не менее, я надеюсь, что это поможет вам начать.
Следует отметить, что ваша таблица promotion
должна быть определена как promotions
, чтобы модель Promotion
могла относиться к ней автоматически.