Laravel 6.x правильный способ обработки сводных таблиц - PullRequest
0 голосов
/ 05 марта 2020

Я хочу соединить мою Customer модель с моей CustomerGroup моделью в Laravel, используя сводные таблицы.

Я попробовал это со следующим: (в качестве ссылки я использовал https://ben.lobaugh.net/blog/204838/how-to-use-custom-pivot-tables-in-laravel-6-x но я мог сделать что-то не так)

Я создал миграцию customer_group_customer и в схему добавил следующее:

$table->unsignedBigInteger("customer_group_id");
$table->unsignedBigInteger("customer_id");

В моделях Customer и Customer_groups Я добавил функцию. Эта функция похожа на следующую (например, это модель Customer):

 public function groups(){
        return $this->belongsToMany("App\CustomerGroup","customer_group_customer","customer_id","customer_group_id");
    }

Затем я создал клиента и группу, а затем связал их вручную с помощью:

        DB::table("customer_group_customer")->insert(["customer_group_id" => $group->id, "customer_id" => $customer->id]);

После этого я выбрал всех клиентов и увидел, что они не подключены (через dd () я не смог увидеть ни одной записи в группах или аналогичных):

$customer = \App\Customer::create([]);
$group = \App\CustomerGroup::create(["name" => "hey"]);
DB::table("customer_group_customer")->insert(["customer_group_id" => $group->id, "customer_id" => $customer->id]);
dd(\App\Customer::first()); 

Как правильно настроить сводные таблицы?

И есть ли лучший способ создать клиента и назначить ему группу, не делая его вручную с фасадом DB?

1 Ответ

0 голосов
/ 06 марта 2020

Причина, по которой вы не видите отношение groups при dd() Customer, заключается в том, что оно не было загружено.

Вы можете загрузить отношение, используя with() при запросе модель, или load() после того, как у вас есть экземпляр модели, или просто путем доступа к отношению как свойству, например, $customer->groups;

Загрузка документации Eloquent Eager

Вы также можете использовать отношение к attach различным отношениям вместо использования DB фасада, чтобы сделать это вручную:

$customer = \App\Customer::create([]);
$group = \App\CustomerGroup::create(['name' => 'hey']);

$customer->groups()->attach($group);

dd($customer->groups);

Присоединение / отсоединение документации

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