php - 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"
}
解决方案
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.
推荐阅读
- r - 在 R 中进行 POST 调用
- android - Firebase Analytics 为 Android 中的单元测试(Mockito)初始化
- dialogflow-es - 哪个更适合用于 Google 助理?操作 SDK 或 JSON 请求响应
- javascript - 趋势预测 Javascript API
- android - 如何在 Android 中加载带有动画的 cardview GridView?
- ios - UICollectionView 内的单元格无法正确呈现
- javascript - 是否可以从本机模块调用 react-360 方法?
- typo3 - Typo3 Powermail:无法导出多个表单 - 如何添加翻译
- node.js - if/else 在一种情况下使用异步代码
- php - implode value does not count as an array