我需要获取状态为“ Disponible”的所有“ Prestation”数据,并获取相关项目用户的“ first_name”和“ last_name”。
我有三个表,第一个是“ Prestations”:
第二个是“项目”,我只需要测试状态:
最后一个表是“用户”,我需要名字和姓氏:
Prestation.php 模型:
public function item()
{
return $this->hasMany('App\Models\Item');
}
Item.php 模型:
public function prestation()
{
return $this->belongsTo('App\Models\Prestation');
}
User.php模型
public function items()
{
return $this->hasMany('App\Models\Item');
}
我阅读了Laravel文档,并尝试了类似的方法:
/**
// * @param Request $request
// * @return mixed
// */
public function prestationsListAvailables(Request $request, $conciergerie_select_id = null)
{
$available = 'Disponible';
$prestations = Prestation::with('item')
->whereHas('item', function($query) use ($available) {
$query->whereIn('status', $available);
})
->get();
return $prestations;
}
但是在这一步,没有任何效果。 我也尝试过这种方法,它是可行的:
/**
* @param Request $request
* @return mixed
*/
public function prestationsListAvailables(Request $request, $conciergerie_select_id = null)
{
$prestations = Prestation::with([
])
->get();
return $prestations;
}
在这里,我得到了所有的“ Prestations”,但我需要测试状态是否不可靠,并获取有关用户的名字和姓氏。 谢谢您的帮助。
答案 0 :(得分:0)
你可以试试吗?
/**
// * @param Request $request
// * @return mixed
// */
public function prestationsListAvailables(Request $request, $conciergerie_select_id = null)
{
$available = 'Disponible';
$prestations = Prestation::whereHas('item', function($query) use ($available) {
$query->where('status', $available);
})
->join('items', 'items.prestation_id', '=', 'prestations.id')
->join('users', 'users.id', '=', 'items.user_id')
->get([
'prestations.*',
'users.firstname AS firstname',
'users.lastname AS lastname'
]);
return $prestations;
}
答案 1 :(得分:0)
我将在User和Item之间创建一个EmiratesToMany关系:
介绍
public function users()
{
return $this->belongsToMany('App\Models\User', 'items')->withPivot(['status','quantity']);
}
然后您可以通过以下方式查询关系:
Presentation::with(['users' => function ($query) use ($available) {
$query->where('status', $available); // you are filtering the pivot table
}])->get();