Модель Laravel принадлежит текущему пользователю и глобальному пользователю - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующие коллекции:

Пользователь

{
    "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) в модель каждого? Другими словами, если бы я запрашивал вещи Боба, я хотел бы получить следующее:

{
    "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"
}

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать это:

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

Недостатком является то, что вы не можете просто добавить другие WHERE предложения:

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

Как следствие, загрузка не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...