php - 通过 hasManyThrough Laravel Eloquent 获取多个表
问题描述
我对数据库有点陌生,我制作了这个小型数据库,但我在从中获取数据时遇到了问题。我试图从登录用户那里获取所有赛车手,它工作正常,但如果我输入,$pigeons = $user->racer
我只能取回赛车手表。我也想知道赛鸽表上赛手的属性。我已经让它与查询生成器一起工作,离开加入表,但我不确定如果我不能使用 Laravel 内部方法,我为什么要设置这种关系。
在用户模型中,我有这些关系:
public function pigeons(){
return $this->hasMany('App\Pigeon');
}
public function racers(){
return $this->hasManyThrough('App\Racer', 'App\Pigeon');
}
这是鸽子模型:
public function user(){
return $this->belongsTo('App\User');
}
public function racer(){
return $this->hasMany('App\Racer');
}
}
这是事件模型:
public function race(){
return $this->hasOne('App\Race');
}
public function racers(){
return $this->hasMany('App\Racer');
}
这就是我的 EventsController 与工作替代方法的样子和评论不工作的样子。
public function upcoming(){
$id = auth()->user()->id;
$user = User::find($id);
$pigeons = DB::table('racers')->leftJoin('pigeons', 'racers.pigeon_id', '=', 'pigeons.id')->where('pigeons.user_id', '=', $id)->get();
//$pigeons = $user->racers;
return view('events.upcoming')->with('pigeons', $pigeons);
}
这是我使用 $user->racers 或 $user->racers()->get() 得到的:
[{"id":1,"pigeon_id":14,"user_id":4,"event_id":1,"position":0,"created_at":null,"updated_at":null},{"id": 2,"pigeon_id":15,"user_id":4,"event_id":1,"position":0,"created_at":null,"updated_at":null},{"id":3,"pigeon_id": 16,"user_id":4,"event_id":1,"position":0,"created_at":null,"updated_at":null}]
这就是我想要得到的,它也不正确,因为我应该得到 id:1 但我想通过查看这些额外的数据以及性别、颜色、能力(但它们在鸽子表中而不是在赛车手中)。
[{"id":14,"pigeon_id":14,"user_id":4,"event_id":1,"position":0,"created_at":"2018-09-27 10:01:04"," updated_at":"2018-09-27 10:01:04","gender":"hen","color":"blue","ability":38},{"id":15,"pigeon_id": 15,"user_id":4,"event_id":1,"position":0,"created_at":"2018-09-27 10:01:04","updated_at":"2018-09-27 10:01 :04","gender":"hen","color":"blue","ability":48},{"id":16,"pigeon_id":16,"user_id":4,"event_id": 1,"位置":0,"created_at":"2018-09-27 10:01:04","updated_at":"2018-09-27 10:01:04"“性别”:“公鸡”,“颜色”:“蓝色”,“能力”:11}]
解决方案
要获得鸽子,您必须做的是$pigeons = $user->racers()->get();
。你可以在 Laravel 的官方文档https://laravel.com/docs/5.5/eloquent-relationships#introduction中看到一个例子。
推荐阅读
- python - 在 Jupyter Notebook 中更改路径?
- java - 使用 gradle 排除已包含在 compileOnly 依赖项中的包
- django - 如何在 Django 中实现服务层?
- php - 如果我在我的项目中使用带有 laravel 的返回函数 paytabs 注销
- java - 使用redis sentinel时如何为redis设置数据库编号
- elasticsearch - Elastic Search 6.x 不断失败
- google-sheets - 如何搜索并将多列排序为一列
- android - 如何在 Fragment 中启动 Realm?
- windows - 获取带有 %SystemRoot% 的字符串不显示它 CMD BATCH
- ios - 在动态高度单元格表中,自动布局是否更改了屏幕上已经显示的单元格的高度?