如何使用 pivot table October Cms 确定结果范围

How to scope results with pivot table October Cms

这个问题的解决方案可能很简单,我只是想念它,但我似乎无法弄清楚如何根据客户所属的“用户”来限制“客户”。

这是多对多的关系,一个客户可以属于多个用户,一个用户可以有多个客户。

这是我的关系定义:

public $belongsToMany = [
    'user_id' => [
        'RainLab\User\Models\User',
        'table' => 'tablename_users_customers',
    ]
];

这里是作用域函数,它没有像我预期的那样工作:

public function scopeUser($query) {
    $user = Auth::getUser()->id;
    return $query->where('user_id', $user)->get();
}

最后,这是我的错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'where clause' (SQL: select * from `tblcustomers` where `user_id` = 1)

显然,错误是因为“user_id”列不存在于 'tblcustomers' table 中,而是存在于主元 table 中。如何在范围函数中使用枢轴 table 中的“user_id”?我只需要显示属于当前登录用户的客户。

是的,这是可能的

但首先您需要从作用域中删除 get() 方法,scope meant to return query 对象以进一步链接方法。

Your relation and scope should look like this

// relation
public $belongsToMany = [
    // PLEASE MAKE RELATION NAME CORRECT HERE
    'users' => [  // not user_id, use `users`
        'RainLab\User\Models\User',
        'table' => 'tablename_users_customers',
        // 'key' => 'customer_id', if needed
        // 'otherKey' => 'user_id' if needed
    ]
];


// scope
use RainLab\User\Models\User;
public function scopeUser($query) {    
    return $query->whereHas('users', function($usersQuery) {
        $user_id = Auth::getUser()->id;
        return $usersQuery->where((new User)->getTable() . '.id', $user_id);       
    });
}

// usage
$result = Customer::user()->get();
dd($result);  
// you will get only customers which has relation with current logged in user. 

如有疑问请评论。