TLTR:
如何使用另一个模型(UserSubscriber)中的范围方法从一个模型(用户)获取集合?模型是一对一的关系。
更多关于:
我有两个模型相关的一对一:
第二个模型仅适用于具有扩展特定角色(本例中为订阅者)的某些用户
用户模型:
class User extends \Sentinel\Models\User
{
public function subscriber()
{
return $this->hasOne('App\Models\UserSubscriber', 'user_id');
}
}
UserExtended模型:
class UserSubscriber extends Model
{
public function user()
{
return $this->belongsTo('App\Models\User', 'user_id');
}
public function scopeLangSubscribers($query, $langCode)
{
$query->where('languages_subscribed', 'LIKE', '%' . $langCode . '%');
}
}
目标是:
使用UserSubscriber中的范围获取用户集合。
(不将此范围方法重写为用户模型。)
我坚持的地方:
$users = User::with(['subscriber' => function ($query) use ($lang) {
$query->langSubscribers($lang);
}])->get();
这会向我返回所有用户'订阅者'其中一些设置为null。
我试图过滤它们,但是:
这可能不是最好的解决方案,因为它在从DB中检索所有用户之后迭代整个大量用户
$users = $users->filter(function($item) {
return $item->subscriber != null;
});
'订户'不是专栏,所以我不能这样做:
->whereNotNull('subscriber')
我该如何做到这一点?
修改
或者,也许有一种方法可以在首先完成这一过程后将一个(订阅者)集合转换为另一个集合(用户),这可以非常简洁地完成:
$usersSubscribers = UserSubscriber::langSubscribers($lang)->get();
答案 0 :(得分:3)
改为使用Event MyEvent()
Public Sub DoWork()
RaiseEvent MyEvent
End Sub
。
Private WithEvents cl As Class1
Private Sub cl_MyEvent()
Call Err.Raise(123, , "ErrorInClass")
End Sub
Private Sub Class_Initialize()
Set cl = New Class1
End Sub
Public Sub DoWork()
cl.DoWork
End Sub