我有这张桌子
ID
名称
大小
室
状态
酒店
created_at
的updated_at
我需要过滤属于某个房间的所有床铺。为了做到这一点,我编写了这一行。
public function index()
{
//
$user = JWTAuth::parseToken()->authenticate();
$data = Input::get('room');
if( $data ){
$beds = Bed::where('room', '=', $data )->get();
}else{
$beds = Bed::where('hotel', '=', $user->hostel )->get();
}
foreach( $beds as $bed) {
return $bed->get( array('size','room', 'id') );
}
}
所以,如果我给它房间ID,它应该只返回那个房间的那个。 问题是它正在返回所有表条目。
有什么想法吗?
更新
修正了关系并尝试了这个:
return Room::with('beds')->findOrFail($data)->beds;
现在它给了我项目数量。 我怎样才能得到这些物品?
更新
这是模特的代码:
class Room extends \Eloquent {
protected $fillable = array('beds', 'price', 'name', 'description','hotel');
public function beds(){
return $this->hasMany('Bed', 'id', 'room');
}
}
更新
var_dump:
var_dump( Room::with('beds')->findOrFail($data)->beds );
是:
int(1)
更新
所以,最终的代码如下。
控制器
public function index()
{
//
$user = JWTAuth::parseToken()->authenticate();
$data = Input::get('room');
if( $data ){
$d = intval( $data );
return Bed::where('room', '=', $d )->get( array('size', 'room', 'id', 'name') );
}else{
return Bed::where('hotel', '=', $user->hostel )->get( array('size', 'room', 'id', 'name') );
}
}
模型
class Room extends \Eloquent {
protected $fillable = array('beds', 'price', 'name', 'description','hotel');
public function camas(){
return $this->hasMany('Bed', 'room', 'id');
}
}
谢谢你们!
答案 0 :(得分:2)
你的尝试中有很多问题:
return $bed->get( array('size', 'room', 'id') );
// runs SELECT size, room, id from `rooms`
所以它会返回所有的房间(为什么你还想在foreach中做这个呢?)
return $this->hasMany('Bed', 'id', 'room');
// should be:
return $this->hasMany('Bed', 'room', 'id');
protected $fillable = array('beds', ...
public function beds(){
这是冲突 - 因为你的桌子上有一列$room->beds
,所以在致电beds
时永远不会得到关系。
说,这就是你需要的:
public function index()
{
$user = JWTAuth::parseToken()->authenticate();
if(Input::has('room')){
$query = Bed::where('room', '=', Input::get('room'));
}else{
$query = Bed::where('hotel', '=', $user->hostel);
}
return $query->get(['size', 'room', 'id']); // given you need only these columns
}
答案 1 :(得分:1)
试试这个,看它是否有效。如果没有,您能提供var_dump
Input::get('room')
和床位表的结构吗?
public function index()
{
//
$user = JWTAuth::parseToken()->authenticate();
$data = Input::get('room');
if( $data ){
$beds = Bed::where('room', '=', $data );
}else{
$beds = Bed::where('hotel', '=', $user->hostel );
}
return $beds->get(['size','room', 'id'])->toArray();
}
更好的是,如果你想在一个房间里找到特定的床,你就可以正确设置你的关系:
return Room::with('beds')->findOrFail($data)->beds;
修改
我看到了你的更新。你确定它给你一些项目,也许有一个项目,数字是它的ID。你能核实吗?如果不是这样的话,请提供它的vardump。您还可以在模型中发布关系代码吗?