【发布时间】:2015-10-27 17:09:18
【问题描述】:
我有这张桌子
床
身份证
名字
尺寸
房间
状态
酒店
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,它应该只返回那个房间的 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');
}
}
谢谢你们!
【问题讨论】:
-
我猜你的
$data变量设置不正确,你的else案例正在触发,发回所有内容。你试过转储$data吗? -
试过了。它触发了if。它不会进入 else 案例。我认为这可能是因为 $data 是字符串。但改为运行 intval( $data ),结果相同
-
奇怪的是,当我给出一个没有床相关的房间 ID 时,它返回空。但是对于任何分配了床位的人,返回所有表格条目
-
看看我的帖子的编辑是否有帮助