我有
areas
。每个area
都有N curses
因此,每个curse
只属于one area
。
class Area extends Model
{
public function curses()
{
return $this->hasMany('App\Curse');
}
}
public function getCursesByAreaId()
{
$areaId = Input::get('areaId'); //ID of selected Area
//area_id is a field of table CURSE. A FK to Area.
$areas = Area::with('curses')->where('area_id', $areaId)->get();
foreach($areas as $area)
{
var_dump($areas);
}
}
class Curseextends Model
{
protected $fillable =
[
'description',
'area_id'
];
}
使用laravel的debugbar,我看到正在执行的查询是:
select * from "areas" where "area_id" = '2'
是不是要运行关系查询? (加入)
已经检查我是否收到了id
的权利,而且没问题
问题是它根本没有带来任何数据。
答案 0 :(得分:1)
您需要以下内容:
$areas = Area::whereHas('curses', function($query) use ($areaId) {
$query->where('area_id', $areaId);
})
->with('curses')
->get();
仅当您想获得具有匹配诅咒的区域时才需要whereHas
。
但是,我认为你可以这样做,如果你只需要相关的诅咒,因为一个诅咒只属于一个区域,所以,如果有区域,那么你将获得所有附加的诅咒:
$area = Area::with('curses')->find($areaId); // Single area
// Access the curses
$curses = $area->curses; // collection of curses
答案 1 :(得分:1)
我认为您正在使用area_id
表格中的关系curse
,请尝试按id
而不是area_id
检索区域ID,如下所示:< / p>
$areas = Area::where('id', $areaId)->with('curses')->get();
希望你能得到解决方案。
答案 2 :(得分:1)
试试这个:
$areas = Area::whereHas('curses', function($area_query) use ($area_id) {
$area_query->where('area_id', $area_id)
})
->with('curses')
->get();