我正在学习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();
}
但是我想知道所有可能的解决方案。
答案 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