hasMany для одной таблицы и возврата основной коллекции моделей laravel

avatar
Solivan
8 апреля 2018 в 09:20
75
1
1

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

field_id, related_field

Я использую этот код для получения связанных_полей:

    public function linked(){
    return $this->hasMany('App\RelatedField','field_id','related_field');
}

но проблема в том, что эта функция возвращает коллекцию RelatedField в качестве результата, а не коллекцию Fields, и это не нужно, а нужна коллекция Fields. как лучше всего решить эту проблему?

Источник

Ответы (1)

avatar
Brian Lee
8 апреля 2018 в 09:48
1

Попробуйте использовать отношение HasManyThrough. Добавьте метод fields в модель Field:

// Field.php
public function fields()
{
    return $this->hasManyThrough(App\Field::class, App\RelatedField::class, 'field_id', 'id');
}
Solivan
8 апреля 2018 в 09:54
0

Благодарю. но я получил эту ошибку: local.ERROR: SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'fields.related_field'

Brian Lee
8 апреля 2018 в 10:03
0

Измените related_field на id, это должно совпасть с таблицей fields.

Solivan
8 апреля 2018 в 10:10
0

Танки Но один вопрос: как laravel обнаружил related_field?

Brian Lee
8 апреля 2018 в 10:13
1

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