Ton*_*ony 8 php laravel eloquent laravel-5
我有一个像这样的hasMany关系函数:
public function articles()
{
return $this->hasMany('App\Article');
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
$data = \App\User::with('articles')->get();
Run Code Online (Sandbox Code Playgroud)
我没有任何问题,因为它返回了预期的数据.像这样的东西:
{
"id": 1,
"name": "Jhon",
"lastname": "Doe",
"articles": [
{
"id": 1,
"title": "Article 1",
"status": "published",
"published_at": "2015-04-30"
},
{
"id": 2,
"title": "Article 2",
"status": "draft",
"published_at": null
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标,但我仍然无法获取关系字段的一个子集来获取此信息:
{
"id": 1,
"name": "Jhon",
"lastname": "Doe",
"articles": [
{
"id": 1,
"title": "Article 1"
},
{
"id": 2,
"title": "Article 2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的目的是找到一种方法来指定Model函数中的字段子集,而不是迭代返回的集合并取消设置不需要的字段.
这可能吗?
pat*_*cus 21
你有几个选择:
使用它时修改关系查询.该with()方法可以接受键/值对的数组,其中键是关系的名称,值是修改关系查询的Closure.
$data = \App\User::with(['articles' => function($query) {
$query->select(['id', 'title', 'user_id']);
}])->get();
Run Code Online (Sandbox Code Playgroud)创建包含所需字段的新关系.
public function articleTitles() {
return $this->hasMany('App\Article')->select(['id', 'title', 'user_id']);
}
$data = \App\User::with('articleTitles')->get();
Run Code Online (Sandbox Code Playgroud)如果您只关心数组/ json输出,则可以修改App\Article模型以仅在转换为数组时显示id和title.
class Article extends Model {
protected $visible = ['id', 'title'];
}
Run Code Online (Sandbox Code Playgroud)你选择什么取决于你需要什么.
注意:对于上面的选项1和2,user_id必须选择外键(),以便Laravel知道在构建关系时如何将模型链接在一起.
Jes*_*vin 13
$data = \App\User::with('articles:id,title,user_id')->get();
Run Code Online (Sandbox Code Playgroud)
// user_id 在 hasmay 关系中很重要
| 归档时间: |
|
| 查看次数: |
10087 次 |
| 最近记录: |