Должен ли я создать модели для промежуточных таблиц в Laravel? - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь проверить, понравилось ли место пользователю, поэтому мне нужно проверить, есть ли уже запись в таблице Place_User. Однако на данный момент я не создал модель для промежуточной таблицы. Я даже не знаю, как назвать модель. Будет ли Place_User иметь смысл для названия модели?

У меня есть следующие 3 таблицы:

Table: Users
Columns: id, username, password

Table: Places
Columns: id, place_id

Table: Place_User
Columns: id, user_id, place_id

У меня также есть 2 следующие модели:

class User extends \Eloquent implements Authenticatable
{
    use AuthenticableTrait;

    public function places(){
        return $this->belongsToMany('App\Place');
    }
}

И

class Place extends Model
{
    public function user(){
        return $this->belongsToMany('App\User');
    }
}

Ответы [ 4 ]

4 голосов
/ 16 мая 2019

Вам не нужна дополнительная модель для множества отношений. Вы можете легко проверить, понравился ли пользователю место вот так:

User::find(1)->places->contains($placeId);

// or

User::find(1)->places()->where('place_id', $placeId)->exists();
0 голосов
/ 16 мая 2019

Последняя версия Laravel 5.8 предоставляет документацию по теме: https://laravel.com/docs/5.8/eloquent-relationships#defining-custom-intermediate-table-models

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

Если вам просто нужно проверить наличие отношения, то уже есть необходимые инструменты:

$hasPlace = User::find(1)->places()->where(/* ... */)->exists();

Если вам действительно нужна модель для вашей сводкитаблицы, это возможно, но я считаю, что в большинстве случаев вам нужно переосмыслить вашу БД Шема.

0 голосов
/ 16 мая 2019

Да, вы должны создавать модели для сводных таблиц. Висячие таблицы без связанных моделей на самом деле не мой выбор. Имена их могут быть немного сложными, хотя я бы предложил UserPlaces для простоты.

Почему вы должны создавать модели?Чтобы вы могли определить 2 отношения в модели UserPlace

  1. Пользователь
  2. Место

Так что в будущем будет легко перемещаться по отношениям из сводкиСам стол.Даже если вы не будете касаться поворота модели / таблицы непосредственно большую часть времени.

0 голосов
/ 16 мая 2019

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

public function user_places()
{
    return $this->belongsToMany('App\Place', 'place_user', 
      'user_id', 'place_id');
}

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

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