如何从关系子查询Laravel返回单个对象

时间:2018-10-11 12:28:12

标签: laravel

我正在学习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 :(得分:1)

如果您只想获取ID,则可以使用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'
]);

答案 1 :(得分:0)

据我了解,您想从集合中获取最新的交易ID,您可以使用集合方法来获取它。

具有一个关系。这将返回一个集合

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

此方法将为我们带来交易ID

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

然后我们将可以使用上述方法获取交易ID

$user->get_trans_id(); // 135