首页 > 解决方案 > Laravel 模型属于当前用户和全局用户

问题描述

我有以下收藏:

用户

{
    "id": 1,
    "name": "Bob"
},
{
    "id": 2,
    "name": "Mary"
}

东西

{
    "id": 1,
    "user_id": 1,
    "name": "Bob's stuff"
},
{
    "id": 2,
    "user_id": 2,
    "name": "Mary's stuff"
},
{
    "id": 3,
    "user_id": 0,
    "name": "Everyone's stuff"
},
{
    "id": 4,
    "user_id": null,
    "name": "Global stuff"
}

...以及以下型号:

class User extends Eloquent {
    public function stuff() {
        return $this -> hasMany( 'Stuff' ) ;
    }
}
class Stuff extends Eloquent {
    public function user() {
        return $this -> belongsTo( 'User' ) ;
    }
}

如何自动将每个人的东西( User.id == 0 )和全局东西( User.id == null )添加到每个人的模型中?换句话说,如果我要查询 Bob 的东西,我希望得到以下信息:

{
    "id": 1,
    "user_id": 1,
    "name": "Bob's stuff"
},
{
    "id": 3,
    "user_id": 0,
    "name": "Everyone's stuff"
},
{
    "id": 4,
    "user_id": null,
    "name": "Global stuff"
}

标签: phplaravel

解决方案


You can use this:

public function stuff() {
    return $this->hasMany(Stuff::class)->orWhere('user_id', 0)->orWhereNull('user_id');
}

A disadvantage is that you can't just add other WHERE clauses:

$user->stuff()->where('foo', 'bar')->get(); // Doesn't work as expected.

As a consequence, eager loading doesn't work.


推荐阅读