2016-05-24 13 views
1

Я создаю купленную таблицу в своем приложении. Итак, у меня есть 2 таблицы: User и Product. Его много-много отношений.Laravel Eloquent Relationship Многие из многих соглашений об именах

Я знаю, что для этого нам нужно создать новую таблицу. Соглашение об именах для таблицы множественное число как пользователи и продукты.

Как мы можем назвать эту таблицу покупок? user_product или users_products?

Также я думаю, что мне нужна модель для этого правильно? Если мне нужна модель, если соглашение об именах для этой модели будет User_Product?

ответ

1

О конвенции об именовании, то есть что-то, что сделает ваш код более читаемым, я думаю, поэтому вы можете назвать его как хотите (в случае, если вы новичок и учитесь, я считаю, что лучше не застревать в конвенции в первом, им все еще учатся моим сами)

в любом случае модель поворота не требуется, если вы просто не нужны пользовательское поведение

Я думаю, что это поможет вам

class User extends Model 
{ 
    /** 
    * The products that belong to the shop. 
    */ 
    public function products() 
    { 
     return $this->belongsToMany('App\Products'); 
    } 
} 

вы можете сделать это : $user->products или q uery $product->users, или и то, и другое.

Теперь с таким заявлением о взаимоотношениях Laravel «принимает», что имя сводной таблицы подчиняется правилам и является user_product. Но, если это на самом деле отличается (например, это множественное число), вы можете предоставить его в качестве второго параметра:

return $this->belongsToMany('App\Products', 'products_users'); 

Если вы хотите знать, как управлять ими вы можете найти больше в here

+0

Это на самом деле не связаны с этим вопросом, но как бы вы сохранить в таблицу user_product, если мы не имеем модель для доступа к нему с красноречивым? – Nello

+0

с использованием методов '-> attach()' и '-> detach()' example_ $ user-> products() -> attach ($ product); 'и как это не связано? –

+0

@Nello [Документация объясняет это подробно] (https://laravel.com/docs/5.2/eloquent-relationships#inserting-many-to-many-relationships) – maiorano84

2

От documentation:

Как уже упоминалось ранее, чтобы определить имя таблицы, содержащей соединения таблицы взаимосвязи, в Eloquent пополнят два связанных названия модели в алфавитном порядке. Однако вы можете переопределить это соглашение. Вы можете сделать это, передав второй аргумент метода belongsToMany

В вашем случае, Laravel предполагается, что присоединение таблица будет называться product_user. Никаких дополнительных модели не требуется:

User.php

class User extends Model 
{ 
    //... 
    public function products() 
    { 
     return $this->belongsToMany(Product::class); 
    } 
    //... 
} 

продукта.PHP

class Product extends Model 
{ 
    //... 
    public function users() 
    { 
     return $this->belongsToMany(User::class); 
    } 
    //... 
} 

И ваши схемы будет выглядеть так:

пользователей Таблица миграции

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    //... 
}); 

продукты Таблица миграции

Schema::create('products', function (Blueprint $table) { 
    $table->increments('id'); 
    //... 
}); 

product_user таблица миграции

Schema::create('product_user', function (Blueprint $table) { 
    $table->integer('product_id'); 
    $table->integer('user_id'); 
    //... 
}); 
Смежные вопросы