Получить несколько таблиц через hasManyThrough Laravel Eloquent - PullRequest
0 голосов
/ 27 сентября 2018

База данных

Я новичок в базах данных, и я создал эту небольшую базу данных, но у меня проблемы с получением данных из нее.Я пытаюсь получить всех гонщиков от вошедшего в систему пользователя, и это работает должным образом, но если я введу $pigeons = $user->racer, я вернусь только к таблице гонщиков.Я хотел бы также узнать атрибуты гонщиков со стола голубей.Я заставил его работать с создателем запросов, оставив присоединение к таблицам, но я не уверен, почему я установил это отношение, если не могу использовать внутренний метод Laravel.

В модели User у меня есть эти отношения:

public function pigeons(){
        return $this->hasMany('App\Pigeon');
    }

    public function racers(){
        return $this->hasManyThrough('App\Racer', 'App\Pigeon');
    }

Это модель Pigeon:

public function user(){
        return $this->belongsTo('App\User');
    }

    public function racer(){
        return $this->hasMany('App\Racer');
    }
}

А это модель Event:

public function race(){
        return $this->hasOne('App\Race');
    }

    public function racers(){
        return $this->hasMany('App\Racer');
    }

А вот так выглядит мой EventController срабочий альтернативный метод и комментарий не работает.

public function upcoming(){
        $id = auth()->user()->id;
        $user = User::find($id);
        $pigeons = DB::table('racers')->leftJoin('pigeons', 'racers.pigeon_id', '=', 'pigeons.id')->where('pigeons.user_id', '=', $id)->get();

        //$pigeons = $user->racers;

        return view('events.upcoming')->with('pigeons', $pigeons);
    }

Это то, что я получаю с помощью $ user-> racers или $ user-> racers () -> get ():

*1 022 * [{ "ID": 1, "pigeon_id": 14, "идентификатор_пользователя": 4, "event_id": 1, "позиция": 0, "created_at": NULL, "updated_at": нулевой}, { "идентификатор": 2," pigeon_id ": 15," идентификатор_пользователя ": 4," event_id ": 1," позиция ": 0," created_at ": NULL," updated_at ": нулевой}, {" идентификатор ": 3," pigeon_id": 16," user_id ": 4," event_id ": 1," position ": 0," creation_at ": null," updated_at ": null}]

И это то, что я хочучтобы получить, это тоже не правильно, так как я должен получить id: 1, но я хочу пройти, чтобы просмотреть эти дополнительные данные, а также пол, солор, способность (но они в таблице голубей, а не в гонщиках).

[{"id": 14, "pigeon_id": 14, "user_id": 4, "event_id": 1,"position": 0, "creation_at": "2018-09-27 10:01:04", "updated_at": "2018-09-27 10:01:04", "пол": "курица", "цвет"":" синий " "способность": 38}, { "ID": 15, "pigeon_id": 15, "идентификатор_пользователя": 4, "event_id": 1, "позиция": 0, "created_at":" 2018-09-27 10:01:04 "," updated_at ":" 2018-09-27 10:01:04 "," пол ":" курица "," цвет ":" синий "," способность ": 48}, {"id": 16, "pigeon_id": 16, "user_id": 4, "event_id": 1, "position": 0, "creation_at": "2018-09-27 10:01:04", "updated_at ":" 2018-09-27 10:01:04 "," пол ":" петух "," цвет ":" синий "," способность ": 11}]

1 Ответ

0 голосов
/ 27 сентября 2018

Чтобы получить голубей, вам нужно будет $pigeons = $user->racers()->get();.Вы можете увидеть пример этого в официальной документации Laravel https://laravel.com/docs/5.5/eloquent-relationships#introduction.

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