Я пытаюсь заполнить таблицу, как в этом примере , но я получаю нулевое значение для клавиш FK. Я ищу решение, но я не нашел ничего, что работает до сих пор. (Я новичок в Laravel и Postgresql)
Модель контракта
class Contract extends Model
{
protected $fillable = ['first_data','second_data'];
public function contractfoo(){
return $this->belongsTo('App\ContractFoo','contract_data_foo');
}
public function contractbar(){
return $this->belongsTo('App\ContractBar','contract_data_bar');
}
}
Модель ContractFoo
class Contractfoo extends Model
{
protected $fillable = ['contract_data_foo','contract_data_second_foo'];
protected $primaryKey = 'contract_data_foo';
public $incrementing = false;
public function contract()
{
return $this->hasMany('App\Contract');
}
}
Модель ContractBar
class ContractBar extends Model
{
protected $fillable = ['contract_data_bar','contract_data_second_bar'];
protected $primaryKey = 'contract_data_bar';
public $incrementing = false;
public function contract()
{
return $this->hasMany('App\Contract');
}
}
Миграция контракта
Schema::create('contract', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('contract_data_bar',50)->nullable(false);
$table->string('contract_data_foo',45)->nullable(false);
$table->integer('first_data');
$table->integer('second_data');
$table->timestamps();
});
Schema::table('contract', function($table) {
$table->foreign('contract_data_foo')->references('contract_data_foo')->on('contract_foo');
$table->foreign('contract_data_bar')->references('contract_data_bar')->on('contract_bar');
});
Миграция ContractFoo
Schema::create('contract_foo', function (Blueprint $table) {
$table->string('contract_data_foo',50)->primary();
$table->integer('contract_data_second_foo');
$table->timestamps();
});
ContractBar Migration
Schema::create('contract_bar', function (Blueprint $table) {
$table->string('contract_data_bar',45)->primary();
$table->integer('contract_data_second_boo');
$table->timestamps();
});
Контрактная фабрика
$factory->define(Contract::class, function (Faker $faker) {
return [
'first_data' =>$faker->randomDigit,
'second_Data' => $faker->randomDigit,
];
});
$factory->define(ContractFoo::class, function (Faker $faker) {
return [
'contract_data_foo' => $faker->randomDigit,
'contract_data_second_foo' => $faker->randomDigit,
];
});
$factory->define(ContractBar::class, function (Faker $faker) {
return [
'contract_data_bar' => $faker->randomDigit,
'contract_data_second_bar' => $faker->randomDigit,
];
});
Сеялка контрактов
factory(App\Contract::class, 10)->create()->each(function ($contract) {
$contractfoo = factory(App\ContractFoo::class)->make();
$contract->contractfoo()->save($contractfoo);
$contractbar = factory(App\ContractBar::class)->make();
$contract->contractbar()->save($contractbar);
});
Я ценю любую помощь!