пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Отношение hasMany(through)

  1. Отношение hasMany(through)

Ко многим через

Связь «ко многим через» обеспечивает удобный короткий путь для доступа к удалённым отношениям через промежуточные. Например, модель Country может иметь много Post через модель User. В данном примере вы можете просто собрать все статьи для заданной country. Таблицы для этих отношений будут выглядеть так:

countries
    id - integer
    name - string

 
users
    id - integer
    country_id - integer
    name - string

 
posts
    id - integer
    user_id - integer
    title - string

Несмотря на то, что таблица posts не содержит столбца country_id, отношение «ко многим через» позволит нам получить доступ к posts через country с помощью $country->posts. Для выполнения этого запроса Eloquent ищет country_id в промежуточной таблице users. После нахождения совпадающих ID пользователей они используются в запросе к таблице posts.

Теперь, когда мы рассмотрели структуру таблицы для отношений, давайте определим отношения для модели Country:

<?php



namespace App;



use Illuminate\Database\Eloquent\Model;



class Country extends Model

{

  /**

   * Получить все статьи по заданной области.

   */

  public function posts()

  {

    return $this->hasManyThrough('App\Post', 'App\User');

  }

}

Первый параметр, переданный в метод hasManyThrough() является именем конечной модели, которую мы получаем, а второй параметр — это имя промежуточной модели.

The third argument is the name of the foreign key on the intermediate model, the fourth argument is the name of the foreign key on the final model.

The third argument is the name of the foreign key on the intermediate model, the fourth argument is the name of the foreign key on the final model, and the fifth argument is the local key:

Обычные соглашения для внешнего ключа Eloquent будут использоваться при выполнении запросов отношения. Если вы хотите настроить ключи отношения, вы можете передать их третьим и четвертым параметрами методу hasManyThrough(). Третий параметр — имя внешнего ключа для промежуточной модели, четвертый параметр — имя внешнего ключа для конечной модели, а пятый аргумент (для версии 5.2 и выше) — локальный ключ:

class Country extends Model

{

  public function posts()

  {

    return $this->hasManyThrough(

              'App\Post', 'App\User',

              'country_id', 'user_id', 'id'

    );



    //для версии 5.1:

    //return $this->hasManyThrough('App\Post', 'App\User', 'country_id', 'user_id');

  }

}

 


22.06.2017; 21:33
хиты: 100
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь