Laravel 6.x Отношение имеет одно с ключом в себе - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу создать отношения между suppliers и supplierGroup. Один поставщик должен иметь одну группу. И в одной группе может быть несколько поставщиков.

В таблице suppliers есть ключ для группы.

$table->integer("supplier_group_id")->nullable();

В моей модели supplier у меня есть следующее:

public function supplierGroup(){
        return $this->belongsTo(SupplierGroup::class);
    }

и в моей supplierGroup модели:

public function supplier(){
        return $this->hasMany(Supplier::class);
    }

Когда я затем создаю поставщика, а затем группу поставщиков, они не связаны

$supplier = \App\Models\Suppliers\Supplier::create([]);
$group = $supplier->supplierGroup()->create([]);

Поле supplier_group_id останется пустым.

Я что-то забыл или неправильно использовал отношения?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Чтобы соединить supplier с supplierGroup, необходимо сделать следующее:

$group = \App\Models\Suppliers\SupplierGroup::create([]);
        $supplier = \App\Models\Suppliers\Supplier::create([]);
        $supplier->supplierGroup()->associate($group)->save();

Создание не работает таким образом (это также не нужно).

0 голосов
/ 04 апреля 2020

Вы должны использовать unsignedInteger для внешних ключей:

Изменить это:

$table->integer("supplier_group_id")->nullable();

На

$table->unsignedInteger("supplier_group_id")->nullable();

Также не забудьте установить внешний ключ:

$table->foreign('supplier_group_id')->reference('id')->on('supplier_groups');

Вы можете использовать метод save для установки группы поставщиков

$supplierGroup = new \App\Models\Suppliers\SupplierGroup()

$supplier->supplierGroup()->save($supplierGroup);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...