Как вернуть отдельный объект из подзапроса отношения Laravel - PullRequest
0 голосов
/ 11 октября 2018

Я учусь Laravel

Мне нужно вернуть только 1 raw from relation subquery вместо array с 1 элементом

Вот мой код:

Контроллер

    public function changeMembership(Users $user, Memberships $membership)
{
    $user->load([
        'transactions' => function ($q) {
            $q->where('status', 'approved')->latest()->first();
        },
        'latest_membership',
        'billing'
    ]);

    dd($user->transactions[0]->id);
}

Модель

    public function transactions()
{
    return $this->hasMany('App\Models\Transactions', 'user_id');
}

Это работает для меня, но я не хочу использовать $user->transactions[0]->id.Как я могу это исправить?

Я знаю, что могу использовать hasOne вместо hasMany

    public function latest_transaction()
{
    return $this->hasOne('App\Models\Transactions', 'user_id')->                    
                                       whereStatus('approved')->latest();
}

Но я хочу знать каждое возможное решение для этого.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Насколько я понимаю, вы хотите получить идентификатор последней_транзакции из коллекции, вы можете получить ее, используя методы коллекции.

отношение hasOne.это вернет коллекцию

public function latest_transaction()
{
    return $this->hasOne('App\Models\Transactions', 'user_id')->whereStatus('approved')->first();
}

, этот метод принесет нам идентификатор транзакции

public function get_trans_id(){
    return $this->latest_transaction->id;
}

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

$user->get_trans_id(); // 135
0 голосов
/ 11 октября 2018

Вы можете использовать pluck(), если хотите получить только идентификатор

$user->load([
    'transactions' => function ($q) {
        $q->where('status', 'approved')->latest()->pluck('id');
    },
    'latest_membership',
    'billing'
]);

, если хотите получить больше столбцов

$user->load([
    'transactions' => function ($q) {
        $q->where('status', 'approved')->latest()->pluck('id','name',//etc);
    },
    'latest_membership',
    'billing'
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...