Laravel Eloquent Несколько отношений - PullRequest
1 голос
/ 04 июля 2019

У меня есть три модели, которые я упростил для примера (пользователь делает запрос на получение телефона):

  1. User

    • id
    • логин
  2. Request

    • id
    • user_id
    • phone_id
  3. Phone

    • id
    • имя

Ниже приведены отношения:

В Модель пользователя :

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

В Модель телефона :

public function phoneRequests()
{
    return $this->belongsTo('App\Requests');
    // But it returns null
}

IМне нужно получить коллекцию, в которой я начинаю с модели User и получаю все запрошенные телефоны (мне нужно там имя).Проблема в том, что phone_id находится в модели запросов, а в документации все наоборот.

Я не могу найти какое-либо отношение для достижения моей цели.

В идеале было бы пройти через следующее отношение:

Auth::user()->requests->phoneRequests
// Would returns the phone name the user has requested

Я также пытался сделать это с помощью необработанного SQL-запроса, но я бы предпочел использовать отношения.Как это сделать?

Ответы [ 2 ]

1 голос
/ 04 июля 2019

В вашей Requests модели телефона должны быть телефонные отношения, например:

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

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

$user->requests->first()->phone; // this is for the first request, but you can get the phone for each request in a loop, I guess you know how to do that.

А также обратите внимание, что ваши отношения в модели телефона неправильные, поэтому причина обнуления.Это должно быть снова hasMany, как у пользователя, потому что у телефона может быть много запросов в соответствии с вашей структурой таблицы.

В вашей модели Phone у вас должно быть это:

public function requests()
{
    return $this->hasMany('App\Requests', 'phone_id');
}

Потому чтотелефон может принадлежать многим запросам согласно структуре вашей БД.

0 голосов
/ 09 июля 2019

Благодаря комментарию newUserName02 решение моего вопроса:

/**
 * Returns all requests made by this client
 * @return Collection
 */
public function requests()
{
    return $this->hasMany('App\Requests');
}

/**
 * Returns all the phones requested by the client
 * @return Collection
 */
public function phones()
{
    return $this->belongsToMany('App\Phone', 'phone_request');
    // where phone_request is the name of the pivot table (App\Requests)
}

Также я приглашаю вас проконсультироваться по этой замечательной статье (вФранцузский), который хорошо объясняет отношения со схемами.

...